我目前有一个软件,它使用两个在每个方面都相同的类,它们具有相同的25个左右的数据成员,并且有一个函数可以进行计算以填充这些数据成员。两者的不同之处在于计算功能。每个类执行不同的计算以填充这25个私有数据成员。
所以我所做的是创建一个具有25个数据成员并在此创建所有getter / setter方法的基类,然后创建两个继承此基类的新类,并为每个新类创建一个计算函数继承基类的类。执行计算的函数在两个子类之间具有相同的名称,但在每个子类中执行不同的操作。我的问题是,有没有办法可以在他们继承的基类中包含计算函数,并在每个子类中定义它们不同?我仍然很不知道压倒一切,但这是一个可以做到这一点的地方吗?如果是这样,我怎么能这样做呢?我意识到这不是什么大不了的事,我只是勉强重复自己,但我想尽可能保持干净。
答案 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_field
或f
的对象调用typeA
。