[英]Are Private members of base class always inherited in derived class in C++?
我曾经在各处看到过,无论您如何继承基类(私有,受保护或公共),基类的私有成员都不会在派生类中继承。
但是下面的问题确实使我困惑。 我不知道为什么这个程序的输出是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;
}
这主要是一个语义问题,不同的人所指的是继承的问题 。 当类型D
从类型B
继承时,每个D
对象都包含完整的 B
对象。 从这个角度来看,所有成员都在那儿 (有些人称其为Inherited )。 另一方面,不能从D
的成员访问这些成员,并且从这种角度来看,这些成员好像不在那里(并且有些人称这不是继承的 )。
基本类型的私有成员(无论具有何种可访问性)都无法从派生类型访问(假设没有友谊关系),但是它们在那里,派生类型的对象包含基本类型的对象。
是的,派生类从其所有基类继承成员。
关键字private,public和protected仅影响它们所应用项的可访问性。 如果某些东西在特定上下文中不可访问,而您尝试使用它,则编译器将给您一个错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.