依赖于构造函数参数的类方法的特殊实现

Special implementation of class methods depending on constructor parameters

本文关键字:实现 类方法 参数 依赖于 构造函数      更新时间:2023-10-16

我有一个类:

    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;
        /* */
      }
    }

我想用另一个定义相同但实现不同的类MyClass1来证明那些"if"语句。

我不希望用户携带这种差异。是否可以用相同的方式初始化不同类的对象?

MyClass a(5);
MyClass b(1);
a.MyMethod(); // not 1
b.MyMethod(); // 1

我不想使用if,因为可能有许多这样的方法具有不同的实现。

听起来像是继承的作业和工厂方法

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();
}

您可以通过以下代码使用继承:

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++中继承的一些信息:一,二