我曾经在任何地方看到基类的私有成员永远不会在派生类中继承,无论你如何继承基类(私有或受保护或公共)。
但是下面的问题让我很困惑。我不知道为什么这个程序的输出是80.它应该是1个字节(这是C ++中空类的大小),因为私有成员永远不会被继承。
#include<iostream>
using namespace std;
class base
{
int arr[10];
};
class b1: public base { };
class b2: public base { };
class derived: public b1, public b2 {};
int main(void)
{
cout << sizeof(derived);
return 0;
}
答案 0 :(得分:3)
这主要是语义问题以及不同的人使用继承引用的内容。当类型D
继承自类型B
时,每个D
对象都包含完整 B
对象。从这个角度来看,所有成员都是那里(有些人称之为继承)。另一方面,这些成员不是D
的成员可访问,从这个角度来看,成员就好像他们不在那里一样(有些人称之为没有继承)。
基础的私有成员(无论什么可访问性)不可以从派生类型访问(假设没有友谊关系),但它们在那里,派生类型的对象包含一个对象基础类型。
答案 1 :(得分:1)
是的,派生类继承了所有基类的成员。
关键字private,public和protected仅影响它们应用于的项目的可访问性。如果在特定上下文中无法访问某些内容并且您尝试使用它,编译器将给您一个错误。