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

时间:2014-10-02 12:57:08

标签: c++ inheritance

我曾经在任何地方看到基类的私有成员永远不会在派生类中继承,无论你如何继承基类(私有或受保护或公共)。

但是下面的问题让我很困惑。我不知道为什么这个程序的输出是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;
}

2 个答案:

答案 0 :(得分:3)

这主要是语义问题以及不同的人使用继承引用的内容。当类型D继承自类型B时,每个D对象都包含完整 B对象。从这个角度来看,所有成员都是那里(有些人称之为继承)。另一方面,这些成员不是D的成员可访问,从这个角度来看,成员就好像他们不在那里一样(有些人称之为没有继承)。

基础的私有成员(无论什么可访问性)可以从派生类型访问(假设没有友谊关系),但它们在那里,派生类型的对象包含一个对象基础类型。

答案 1 :(得分:1)

是的,派生类继承了所有基类的成员。

关键字private,public和protected仅影响它们应用于的项目的可访问性。如果在特定上下文中无法访问某些内容并且您尝试使用它,编译器将给您一个错误。