想象一下,我有两个类,其中一个依赖于另一个:
class A
{
public:
A(bool flag)
{
}
};
class B
{
public:
B(A a) :
mA(a)
{
}
A mA;
};
现在假设我还有另外两个类:一个使用Foo和Bar的基类,以及一个派生自该类的类:
class Base
{
public:
Base(A a, B b) :
mA(a),
mB(b)
{
}
A mA;
B mB;
};
class Derived : Base
{
Derived() :
Base(A(true), B(????))
{
}
};
我怎样才能在这里建造吧?
答案 0 :(得分:1)
像这样:
class Derived
:
public Base
{
public:
Derived()
:
Base (true, Foo (false))
{
};
此处不使用new
。托托,我们不再是C#了。 new
用于对象的动态实例化,并返回指针。你不是在这里动态分配任何东西,而是你不存储指针。您不使用new
。
答案 1 :(得分:0)
想象一下,我有两个课程,其中一个是依赖另一个...
Derived() : Base(A(true), B(
的 ???? 强>))
要为c++中的类设计依赖关系或关系,您需要使用引用(只要您不引用类A
的简单等效副本实例):
class A
{
public:
A(bool flag) { }
};
class B
{
public:
B(A& a) : mA(a) { }
A& mA;
};
让课程Base
执行:
class Base
{
public:
Base(bool flag) : mA(flag), mB(mA) { }
private:
A mA;
B mB;
};
要允许默认构造和以后的赋值,请使用指针(Derived
可以在构造函数体中设置mB.mA
):
class B
{
public:
B()
: mA(nullptr) { }
B(A* a) : mA(a) { }
A* mA;
};
对于后一种选择,更不用说c++11 or other smart pointer实施的所有变体(请参阅std::unique_ptr
,std::shared_ptr
,std::weak_ptr
)!