关于继承和覆盖的问题
Questions on Inheritance and Overriding
我目前有一个软件,它使用两个在各个方面都相同的类,它们具有相同的 25 个左右的数据成员,并且有一个函数可以进行计算以填充这些数据成员。 两者的区别在于计算函数。 每个类执行不同的计算来填充这 25 个私有数据成员。
所以我所做的是创建一个具有 25 个数据成员的基类,并在此处创建了所有 getter/setter 方法,然后创建了两个继承此基类的新类,并且为每个继承基类的新类创建了一个计算函数。 执行计算的函数在两个子类之间具有相同的名称,但在每个子类中执行不同的操作。 我的问题是,有没有办法将该计算函数包含在它们继承的基类中,并在每个子类中定义不同的它们? 我对覆盖仍然很陌生,但这是一个可以做到这一点的地方吗?如果是这样,我该怎么做呢? 我意识到这没什么大不了的,我只是勉强重复自己,但我想让事情尽可能干燥。
听起来你只是想要一个基类中的纯虚函数。 像这样:
struct base {
int field;
virtual void set_field(int) = 0;
};
struct typeA : base {
void set_field(int val) override { field = /* some function of */ val; }
};
struct typeB : base {
void set_field(int val) override { field = /* some function of */ val; }
};
基类中的= 0
将set_field
声明为纯虚函数,这意味着在base
中没有实现的函数。 因为base
有一个或多个纯虚函数,所以它是一个纯虚类——你永远不能创建base
类型的对象,只能创建子类型的对象。
但是,继承为您提供的是,您可以对指向基类(甚至是纯虚拟类)的指针或引用进行操作,而无需知道派生类型是什么。 这意味着您可以编写一个调用set_field
的函数void f(base &)
,并且可以在typeA
或typeB
的对象上调用f
。
相关文章:
- 覆盖应用程序的低级别键盘挂钩问题
- 关于继承和覆盖的问题
- C++自动内存 malloc 和免费覆盖问题
- Arduino:覆盖打印类问题
- C++类是否解决函数覆盖问题
- 如果私有虚拟函数被覆盖为派生类中的公共函数,那么问题是什么
- C++中的第一个覆盖前缀-我的代码出了什么问题
- C 多重继承,虚拟方法覆盖问题和协变量返回类型
- C 的多态性问题 - 数据覆盖
- LCOV 问题:奇怪的重复构造函数标记为未覆盖和函数未标记为已覆盖,即使它的行已被执行
- gcovr-在xml覆盖Cobertura报告中是否存在损坏文件名的已知问题
- 覆盖派生类的函数时遇到问题
- 与覆盖全局新建和删除运算符有关的问题
- 覆盖运算符 =,以便我们可以使用 = 复制类实例,而不会有浅层复制问题
- 模板嵌套类的构造函数问题(复制 ctor 似乎覆盖了其他 ctor)
- 在将MongoDB查询覆盖到C++查询时遇到问题
- 覆盖使用模板参数包扩展声明的虚拟方法时遇到问题
- 提振.测试-问题覆盖主程序
- R / c++中集合覆盖问题的变体
- 一个c++协方差/覆盖/循环问题