【发布时间】:2021-11-26 01:11:50
【问题描述】:
对于我的最新项目,我有一门课
class Parent {
public:
// class constructor
Parent();
// member function
double fun(double x)
};
和另一个班级
class Child {
private:
int type;
public:
// class constructor
Child(int itype);
};
我知道我可以通过指定class Child : public Parent 从Parent 继承函数,以便我的类child 的实例可以调用fun。但是,我希望函数fun 根据type 执行不同的计算。例如,如果我的Child 类的实例由Child nChild(1); 初始化,则调用nChild.fun(5) 应返回5 的平方根,而通过Child nChild(2); 初始化类时,调用nChild.fun(5) 应返回对数5 等等。
如何设计一个具有依赖关系的类系统,使父类中的函数依赖于子类的值?这是否有意义,或者通常建议不要使用这种架构?请注意,我不是 C++ 专家。
【问题讨论】:
-
阅读关键字
virtual以及它如何应用于函数。 -
程序运行时成员变量类型可以取任何值,但类层次结构必须在编译时完全定义。所以你不能让类层次结构以某种方式依赖于变量的值。
-
也许您想创建一个像“Parent * createObject(int itype);”这样的工厂函数,它根据“itype”的值分配并返回不同子类的对象?然后,您可以将“double fun(double x)”设为虚拟,并在您定义的每个不同子类中以不同方式实现它。
-
是否有任何理由不能在父级中使用单独的函数,例如平方根和对数,而不是通过代码进行调度?
-
可能不使用
int,而是使用需要对值执行操作的类?您将type绑定到一个数字,但是当您可以传递一个包含所有信息的类时,为什么要这样做,包括对值执行的函数。如果您以这种方式做事,我什至看不到Parent的必要性,除非我遗漏了什么。