覆盖父类的私人成员

Dre*_*pin 3 c++

鉴于以下课程:

class foo
{
private:
    int c;

public:
    foo( int a = 42 ) { c = a; }
    ~foo();
};

class bar: public foo
{
public:
    bar();
    ~bar();
};
Run Code Online (Sandbox Code Playgroud)

我怎样才能让Ç用不同的号码?我可以这样做吗?

bar::bar() 
{
    c = 12;
}
Run Code Online (Sandbox Code Playgroud)

我在尝试编译时遇到此错误:

test.cpp:在构造函数中‘bar::bar()’:
test.cpp:8:7:error:‘int foo::c’是私有的

ild*_*arn 5

在构造函数初始化列表中调用基类的构造函数:

bar::bar()
  : foo(12)
{ }
Run Code Online (Sandbox Code Playgroud)

顺便说一下,你应该总是更喜欢在构造函数体内使用构造函数初始化列表而不是赋值,因此你的foo构造函数可以更好地编写为:

foo( int a = 42 ) : c(a) { }
Run Code Online (Sandbox Code Playgroud)