要在构造函数上初始化的抽象变量
Abstract variable to be initialized on constructor
我有一个 class(我们称它为 Example
),它本身有一个变量 child
。
此变量是 class Child1
或 Child2
的对象,它们都是抽象 class Father
的子对象。我希望在构造函数上定义它。这是我的尝试:
class Example {
public:
Father child; //This does not work because father is abstract
};
Example::Example(bool use_1) {
if use_1 { child = Child1(); }
else { child = Child2(); }
}
我目前在 public 上定义了两个对象,并且只初始化了一个,但它看起来很丑陋。
class Example {
public:
Child1 child1;
Child2 child2;
//father child; This does not work because father is abstract
};
Example::Example(bool use_1) {
if use_1 {
child1 = Child1(); // I would like to use child only here...
}
else {
child2 = Child2(); // ... and here
}
}
有更好的方法吗?
假设您的 Child1
和 Child2
派生自 Father
,这是动态多态性的标准情况。你需要持有一个指针(通常是智能指针)而不是对象本身:
class Example {
public:
std::unique_ptr<Father> child;
};
Example::Example(bool use_1) {
if( use_1 ) { child = std::make_unique<Child1>(); }
else { child = std::make_unique<Child2>(); }
}
我有一个 class(我们称它为 Example
),它本身有一个变量 child
。
此变量是 class Child1
或 Child2
的对象,它们都是抽象 class Father
的子对象。我希望在构造函数上定义它。这是我的尝试:
class Example {
public:
Father child; //This does not work because father is abstract
};
Example::Example(bool use_1) {
if use_1 { child = Child1(); }
else { child = Child2(); }
}
我目前在 public 上定义了两个对象,并且只初始化了一个,但它看起来很丑陋。
class Example {
public:
Child1 child1;
Child2 child2;
//father child; This does not work because father is abstract
};
Example::Example(bool use_1) {
if use_1 {
child1 = Child1(); // I would like to use child only here...
}
else {
child2 = Child2(); // ... and here
}
}
有更好的方法吗?
假设您的 Child1
和 Child2
派生自 Father
,这是动态多态性的标准情况。你需要持有一个指针(通常是智能指针)而不是对象本身:
class Example {
public:
std::unique_ptr<Father> child;
};
Example::Example(bool use_1) {
if( use_1 ) { child = std::make_unique<Child1>(); }
else { child = std::make_unique<Child2>(); }
}