繁体   English   中英

基类的私有成员是否总是在C ++的派生类中继承?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM