类方法的特殊实现取决于构造函数参数

时间:2015-11-11 11:36:33

标签: c++ oop

我有一个班级:

    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因为可能有很多这样的方法有不同的实现。

2 个答案:

答案 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

有关c ++中继承的一些信息:onetwo