【发布时间】:2021-11-08 13:38:24
【问题描述】:
我有一个类“Parent1”和另一个“Parent2”,它们象征着设备“子类”的不同硬件实现。实现这一点的最优雅的方式是什么?我曾考虑过使用模板,例如
class Parent1{
public:
Parent1():
void run();
};
class Parent2{
public:
Parent2():
void run();
};
template<typename Parent>
class Subclass : Parent {
public:
Subclass();
void doSomething(){Parent:run();}
}:
但是子类不知道基类的run()函数。
我还考虑让子类成为接口类,子类需要从父类继承的方法是纯虚函数,然后在从所选类继承的另一个子类中指定。
我相信这对于这个特定的应用程序来说是可以的,因为我需要虚拟化的方法并不多,但我想知道这是否会扩展。所以我的解决方案应该是这样的。
class Subclass {
public:
Subclass();
virtual void run()=0;
void doSomething(){run();}
}:
class SubSubclass1 : Subclass, Parent1{
public:
SubSubclass1():Subclass(),Parent1(){}
void run(){Parent1:run();}
};
class SubSubclass2 : Subclass, Parent2{
public:
SubSubclass2():Subclass(),Parent2(){}
void run(){Parent2:run();}
};
但我想知道是否有更好的方法来做到这一点?
非常感谢!
【问题讨论】:
-
But then the Subclass does not know the run() function from the base class.确实如此。 -
“但是子类不知道基类中的 run() 函数。” - 你能详细说明一下这个说法吗?为什么不能调用基类函数?
-
一旦你用
:修复了各种问题,你的原始代码就会编译,在C++中Subclass不需要知道run()来自哪里。 -
Parent1():应该是Parent1();。Parent2:run();应该是Parent2::run();并且Subclass应该在类声明中使用;而不是:。 -
你在倒退。查找多态性。
标签: c++ object oop templates inheritance