c++ - 根据构造函数参数特殊实现类方法

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

我想用另一个具有相同定义但不同实现的类 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();
}

关于c++ - 根据构造函数参数特殊实现类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33649710/

相关文章:

c# - 类如何从自身的参数化版本继承?

Javascript 命名空间和 OO 组织

c++ - 如何找到 2 张 map 中所有常见的键?

c++ - 如何使用 curl 请求发送数据

c++ - 如何在等待前检测 pthread 条件信号?

c++ - 有没有运行时 C++ 汇编程序库?

javascript - 原型(prototype)实例如 cat c = new Animal();?

c++ - curl - PROTOCONNECT 属于什么超时

php - 聚合和存储库。如何确定总量?

java - 可以避免在 Java 中默认调用 super() 吗?