C++ 在C+中,有没有办法使一个类与另一个相等+;?

C++ 在C+中,有没有办法使一个类与另一个相等+;?,c++,C++,我正在尝试编写一个层,使项目的某些组件更加模块化。如何使一个类Foo与一个类Bar完全相等,其中Foo可以用作函数int testFunc(Bar a)中的变量“a” 唯一的解决办法是让Foo有这样的定义吗 class Foo { public: Foo(int a) : barReturn(a) {}; operator Bar() const { return barReturn; } private: Bar barReturn; }; 如果需要真实的别名,可以使

我正在尝试编写一个层,使项目的某些组件更加模块化。如何使一个类Foo与一个类Bar完全相等,其中Foo可以用作函数
int testFunc(Bar a)
中的变量“a”

唯一的解决办法是让Foo有这样的定义吗

class Foo {
public:
    Foo(int a) : barReturn(a) {};
    operator Bar() const { return barReturn; }
private:
    Bar barReturn;
};

如果需要真实的别名,可以使用别名:

从C++11开始:

using Foo = Bar;
或旧方法(仍然有效):


可以使用C++的多态性。

class Foo {
public:
    virtual Foo(int a);
    virtual Update(int a);
};

class Bar1 : public Foo{
public:
    virtual Bar1(int a): m_a(a);
    virtual Update(){
        // TODO:
    }
private:
    int m_a;
};

class Bar2 : public Foo{
public:
    virtual Bar1(int a): m_b(a);
    virtual Update(){
        // TODO:
    }
private:
    int m_b;
};

// There a module to do Foo
void ProcessModule(){
    std::vector<Foo*> v;
    v.push_back(new Bar1(1));
    v.push_back(new Bar2(2));

    for (std::vector<Foo*>::itreator it = v.begin(); v != v.end(); ++v){
        it->UPdate()
    }
}
class-Foo{
公众:
虚拟Foo(inta);
虚拟更新(INTA);
};
第1类:公共食品{
公众:
虚拟Bar1(inta):m_a(a);
虚拟更新(){
//待办事项:
}
私人:
国际货币基金组织;
};
第2类:公共食品{
公众:
虚拟Bar1(inta):m_b(a);
虚拟更新(){
//待办事项:
}
私人:
国际货币基金组织;
};
//有一个模块可以做Foo
void ProcessModule(){
std::向量v;
v、 推回(新杆1(1));
v、 推回(新杆2(2));
对于(std::vector::itreator it=v.begin();v!=v.end();++v){
它->更新()
}
}

示例函数原型是
inttestfunc(Bar a)
,因此1)目标是将
foo
粘贴到a
条中。你似乎有相反的想法。2) 在这里使用继承会造成混乱。@user4581301我认为可能是继承可以解决这个需要的问题“我正在尝试编写一个层,使项目的某些组件更模块化。”如果目标是将一个foo粘贴到一个条中,他需要使用指针,而不是对象。这取决于您期望的
testFunc()
当传递一个
Foo
时要执行的操作-您根本没有指定它。有很多选择——都有利弊。一种方法是保持
Foo
Bar
完全独立,并提供一个
testFunc(Foo)
重载,该重载从
Foo
创建一个
Bar
,并将其传递给
testFunc(Bar)
testFunc(Bar)
,然后不需要知道任何关于
Foo
)。另一个选项是
使用Foo=Bar
,这使得
Foo
成为
Bar
的替代名称。其他选项包括继承(例如,
Foo
Bar
继承和重写继承的虚拟函数)
class Foo {
public:
    virtual Foo(int a);
    virtual Update(int a);
};

class Bar1 : public Foo{
public:
    virtual Bar1(int a): m_a(a);
    virtual Update(){
        // TODO:
    }
private:
    int m_a;
};

class Bar2 : public Foo{
public:
    virtual Bar1(int a): m_b(a);
    virtual Update(){
        // TODO:
    }
private:
    int m_b;
};

// There a module to do Foo
void ProcessModule(){
    std::vector<Foo*> v;
    v.push_back(new Bar1(1));
    v.push_back(new Bar2(2));

    for (std::vector<Foo*>::itreator it = v.begin(); v != v.end(); ++v){
        it->UPdate()
    }
}