我实现了一个继承自超类的类。超类需要其构造函数的参数。我希望子类可以实例化而不需要参数。超类看起来像这样:
class OtherClass {
public:
OtherClass(YetAnotherClass *yac);
};
class SuperClass {
public:
SuperClass(OtherClass *c);
};
我想做这样的事情:
class MyClass : public SuperClass {
public:
MyClass() : SuperClass(OtherClass(YetAnotherClass)) {}
};
为了避免在实例化MyClass
的成员时必须执行此类操作:
YetAnotherClass * only_used_once = YetAnotherClass();
OtherClass * also_used_just_once = OtherClass(only_used_once);
MyClass what_i_actually_want = MyClass(also_used_just_once);
这可能吗? A similar question展示了创建一个静态方法的解决方案,该方法产生了父构造函数所需的参数,但我希望有更简单的方法来实现它。
答案 0 :(得分:1)
使用:
struct DataClass
{
DataClass() : yetAnotherClass(), otherClass(&yetAnotherClass) {}
YetAnotherClass yetAnotherClass;
OtherClass otherClass;
};
如果MyClass
的每个实例拥有另一个类,您可以执行以下操作:
class MyClass : private DataClass, public SuperClass
{
public:
MyClass() : DataClass(), SuperClass(&this->otherClass) {}
};
否则他们会分享其他课程,你可以这样做:
class MyClass : public SuperClass
{
public:
MyClass() : SuperClass(&dataClass.otherClass) {}
private:
static DataClass dataClass;
};
DataClass MyClass::dataClass;