我有一个班级:
class MyClass {
int param_;
void MyMethod();
public:
MyClass(int param) : param_(param) {};
}
void MyClass::MyMethod() {
if (param_ == 1) {
std::cout << "1" << std::endl;
/* */
} else {
std::cout << "not 1" << std::endl;
/* */
}
}
我想废除那个&#34;如果&#34;具有相同定义但实现不同的另一个类MyClass1
的语句。
我不希望用户承担这种差异。是否可以以相同的方式初始化不同类的对象?
MyClass a(5);
MyClass b(1);
a.MyMethod(); // not 1
b.MyMethod(); // 1
我不想使用if
因为可能有很多这样的方法有不同的实现。
答案 0 :(得分:3)
听起来像是继承和工厂方法的工作
class Base
{
public:
virtual void MyMethod() = 0;
}
class Class1: public Base
{
public:
virtual void MyMethod(){// implement 1}
}
class ClassNot1: public Base // or public Class1, if you have some implementation in Class1 you want use in this class
{
public:
virtual void MyMethod(){// implement not 1}
}
Base* SomeFactoryClass::GetBase(int param)
{
if (param == 1)
return new Class1();
else
return new ClassNot1();
}
答案 1 :(得分:0)
您可以通过以下代码使用继承:
class MyClass
{
public:
virtual void MyMethod(void)
{
cout << "1" << endl;
}
};
class MyClass1 : public MyClass
{
public:
virtual void MyMethod(void) override
{
cout << "not 1" << endl;
}
}
用法:
MyClass* a = new MyClass();
MyClass* b = new MyClass1();
a->MyMethod(); // prints 1
b->MyMethod(); // prints not 1