我有一个抽象基类,它对所有派生类强制执行某些操作。除此之外,我想强制执行某些特定于派生类中声明的子类的其他操作。
以下是一个最小示例:
class Base {
public:
virtual void init() = 0;
virtual void reset() = 0;
};
class Derived1 : public Base {
class Data {
int *x1;
public:
Data() {
x1 = NULL;
}
void alloc(int num) {
x1 = new int[num];
}
~Data() {
delete[] x1;
x1 = NULL;
}
} data;
public:
void init() { ... }
void reset() { ... }
void resetData() {
data.~Data();
}
};
class Derived2 : public Base {
class Data {
float *x2;
public:
Data() {
x2 = NULL;
}
void alloc(int num) {
x2 = new float[num];
}
~Data() {
delete[] x2;
x2 = NULL;
}
} data;
public:
void init() { ... }
void reset() { ... }
void resetData() {
data.~Data();
}
};
在上面的示例中,Base 对所有派生类强制执行 init() 和 reset() 方法。
除此之外,我想强制所有派生类都有
- 命名数据的成员变量和
resetData()
调用此变量的析构函数的方法- 一个被调用的方法
Data &getData()
,它获取对变量的引用
实现这一目标的最佳方法是什么?