在超类需要参数的地方构造不带参数的对象

Construct object without arguments where superclass requires arguments

本文关键字:参数 对象 方构造 超类      更新时间:2023-10-16

我正在实现一个继承自超类的类。超类需要构造函数的参数。我希望子类是可实例化的,不需要参数。超类看起来像这样:

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);

这可能吗?一个类似的问题显示了创建静态方法的解决方案,该方法生成父构造函数所需的参数,但我希望有一种更简单的方法来实现它。

With:

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;