【发布时间】:2020-01-14 21:39:03
【问题描述】:
我有一个类MyClass(带有几个虚函数),它对一个名为MyType 的对象执行操作。
MyClassImpl类继承MyClass并实现了虚函数,但是我需要给MyType添加额外的成员,但是我不想修改类MyType(而是我想保留它通用)。
现在,如果我创建一个MyTypeImpl 并继承MyType,我可以添加成员。但是,如何使MyClassImpl(继承自MyClass)中的非虚函数使用新的MyTypeImpl?
我能想到的唯一方法是让MyClass 使用MyTypeImpl,但我想避免在泛型类中使用实现,因为我可能会使用各种不同的实现。
下面是一个简单的类可能是什么样子的例子。当然,代码不会编译,因为MyTypeImpl而不是MyType中添加的方法和成员。
class MyType {
public:
void increment() {
data_++;
}
protected:
int data_ = 0;
};
class MyClass {
public:
void alg() {
sub_routine_1();
sub_routine_2();
modify_mytype();
};
protected:
MyType mytype_;
virtual void sub_routine_1() = 0;
virtual void sub_routine_2() = 0;
void modify_mytype() {
mytype_.increment();
};
};
class MyTypeImpl : public MyType {
public:
void decrement() {
data_--;
is_decremented = true;
};
protected:
bool is_decremented = false;;
};
class MyClassImpl : public MyClass{
public:
void print() {
mytype_.print();
};
protected:
virtual void sub_routine_1() {
//do algorithm things here
mytype_.increment();
mytype_.increment();
};
virtual void sub_routine_2() {
//do more algorithm things here
mytype_.decrement();
mytype_.decrement();
};
};
【问题讨论】:
-
您能否提供一个用例或您编写的一些代码示例来尝试完成此操作?我认为这有助于使您的问题更清楚
-
如果您不能/不想在 MyType 级别提供通用接口(例如,以纯或空实现的虚函数的形式),那么您必须测试和/或动态转换为 MyTypeImpl ind MyClassImpl。
-
您能edit your question 并添加一个代码示例来说明您正在尝试做什么吗?即使你不能完全做到这一点,一个具体的例子也会帮助我们更好地理解你。
-
听起来你想要一些东西visitor-ish.
-
我将做一个简单的例子并添加到描述中。
标签: c++ oop inheritance module