class base
{
private:
int a;
};
class base2
{
private:
int b;
};
class derived:public base,public base2
{
private:
int c;
};
main()
{
base b;
derived d;
cout<<size of(base)<<size of(base2)<<size of(derived);
}
因为int a和int b是私有变量。所以它们不会在派生类中继承。所以输出应该是4 4 4但它是 输出:4 4 12 为什么呢?
答案 0 :(得分:6)
因为
int a
和int b
是私有变量。所以它们不会在derived
类中继承
这是错的 - 当然它们是继承的,基类中的代码如果没有它们就无法工作。只是derived
无法访问它们,但它不会更改派生类的sizeof
。
考虑你的例子的这个扩展:
class base {
private:
int a;
protected:
base() : a(123) {}
void showA() {cout << a << endl;}
};
class base2 {
private:
int b;
protected:
base2() : b(321) {}
void showB() {cout << b << endl;}
};
class derived:public base,public base2 {
private:
int c;
public:
derived() : c (987) {}
void show() {
showA();
showB();
cout << c << endl;
}
};
即使您的derived
课程无法阅读或更改a
和b
,它也可以通过调用其基础中的相应功能来显示其值。因此,变量必须保留在那里,否则showA
和showB
成员函数将无法完成其工作。
答案 1 :(得分:0)
private:
或protected:
或public:
注释仅影响可见性。但是这些领域仍在课堂上。
花几天时间阅读一本好的C ++编程书。