关于继承和覆盖的问题

时间:2017-07-15 23:34:08

标签: c++ inheritance override

我目前有一个软件,它使用两个在每个方面都相同的类,它们具有相同的25个左右的数据成员,并且有一个函数可以进行计算以填充这些数据成员。两者的不同之处在于计算功能。每个类执行不同的计算以填充这25个私有数据成员。

所以我所做的是创建一个具有25个数据成员并在此创建所有getter / setter方法的基类,然后创建两个继承此基类的新类,并为每个新类创建一个计算函数继承基类的类。执行计算的函数在两个子类之间具有相同的名称,但在每个子类中执行不同的操作。我的问题是,有没有办法可以在他们继承的基类中包含计算函数,并在每个子类中定义它们不同?我仍然很不知道压倒一切,但这是一个可以做到这一点的地方吗?如果是这样,我怎么能这样做呢?我意识到这不是什么大不了的事,我只是勉强重复自己,但我想尽可能保持干净。

1 个答案:

答案 0 :(得分:1)

听起来你只想在基类中使用纯虚函数。像这样:

(?<![^[:space:]])

基类中的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的函数void f(base &),然后就set_fieldf的对象调用typeA