我有一个类(class) A
和两个 child B
和 C
如下:
class A {
private:
int x;
template<class T>
void setX(T &y);
public:
A();
};
class B : public A {
private:
static const double y;
public:
B();
};
class C : public A {
private:
static const int y;
public:
C();
};
两个 child 的区别仅在于它们的静态成员 y
的类型。除了静态成员的初始化之外,C 和 B 的实现是相同的:
B::B() : y (1.2) { setX(y) }
C::C() : y (2) { setX(y) }
但这种方法的问题是,在实现文件中,我必须为 B
和 C
编写两次相同的代码。有没有合适的方法来编写这个,这样我就不需要编写两次对 setX
的调用?
在实际问题中,类稍微复杂一些,但手头的情况是一样的。特别是,y
的初始化需要非平凡的构造函数,因此它必须在实现文件中。
最佳答案
您可以为 A
编写构造函数作为函数模板。
class A {
//....
public:
template<typename T>
explicit A(T& y) {
setX(y);
}
};
然后从子类中调用该构造函数:
class B : public A{
//...
public:
B() : A(1.2), y(1.2)
{}
};
唯一的问题是基类构造函数首先被调用,因此您需要重复常量数据值两次。不过,您可以轻松地对其进行宏设置。
关于c++ - 仅静态常量成员不同的两个子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39936850/