我有以下课程:
class Base {
public:
Base(string name) {
agg = new Aggregate(name);
}
private:
Aggregate* agg;
};
现在,我需要扩展此类:
class Derived : Base {
public:
Derived(string name) : Base(name) {
agg2 = new Aggregate2(name);
}
private:
Aggregate2* agg2;
};
我想要的是在创建Base
对象时Aggregate
需要创建的内容,而在创建Derived
对象时仅Aggregate2
应创建的内容。
现在,这是不会发生,因为Aggregate
它的当我创建一个被称为构造函数内部创建Derived
对象,并像这样Aggregate
和Aggregate2
将被创建。
我可以将创建内容移到其他方法,然后在创建对象后调用它。
还有其他优雅的方式可以做我想要的吗?
您可以使用以下内容:
class Base {
public:
explicit Base(string name) : agg(new Aggregate(name)) {}
protected:
Base() = default;
private:
std::unique_ptr<Aggregate> agg;
};
class Derived : Base {
public:
// implicit call to Base(), you may be explicit if you want
Derived(string name) : agg2(new Aggregate2(name)) {}
private:
std::unique_ptr<Aggregate2> agg2;
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句