我为什么不能这样做?
class A
{
public:
int a, b;
};
class B : public A
{
B() : A(), a(0), b(0)
{
}
};
你不能初始化a
,并b
在B
因为它们不是成员B
。它们是的成员A
,因此只能对其A
进行初始化。您可以将它们公开,然后在中进行分配B
,但这不是推荐的选择,因为这会破坏封装。而是在中创建一个构造函数A
以允许B
(或的任何子类A
)对其进行初始化:
class A
{
protected:
A(int a, int b) : a(a), b(b) {} // Accessible to derived classes
// Change "protected" to "public" to allow others to instantiate A.
private:
int a, b; // Keep these variables private in A
};
class B : public A
{
public:
B() : A(0, 0) // Calls A's constructor, initializing a and b in A to 0.
{
}
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句