C++ 在C+中,有没有办法使一个类与另一个相等+;?
我正在尝试编写一个层,使项目的某些组件更加模块化。如何使一个类Foo与一个类Bar完全相等,其中Foo可以用作函数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; }; 如果需要真实的别名,可以使
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()
}
}