amr*_*san 107 c++ inheritance
为什么我不能这样做?
class A
{
public:
int a, b;
};
class B : public A
{
B() : A(), a(0), b(0)
{
}
};
Run Code Online (Sandbox Code Playgroud)
In *_*ico 123
你不能初始化a和bin,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.
{
}
};
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 24
撇开事实,他们是private,因为a和b是的成员A,他们是为了通过初始化A的构造函数,而不是由一些其他类的构造函数(衍生与否).
尝试:
class A
{
int a, b;
protected: // or public:
A(int a, int b): a(a), b(b) {}
};
class B : public A
{
B() : A(0, 0) {}
};
Run Code Online (Sandbox Code Playgroud)
不知何故,没有人列出最简单的方法:
class A
{
public:
int a, b;
};
class B : public A
{
B()
{
a = 0;
b = 0;
}
};
Run Code Online (Sandbox Code Playgroud)
您不能访问初始化列表中的基成员,但是构造函数本身,就像任何其他成员方法一样,可以访问基类的public和protected成员。