基类的私有成员是否始终在C++的派生类中继承?
问题描述:
无论您如何继承基类(私有或受保护或公共),我都会发现无处不在基类的私有成员永远不会继承于派生类中。基类的私有成员是否始终在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
对象。从这个角度来看,所有的成员都是那里有(有的人把这称为继承了)。另一方面,这些成员不是易于获得从D
的成员,并从这一角度来看,成员好像他们不在那里(有些人称这个没有继承)。一个基地(不管是什么无障碍环境)的
私有成员都是从派生类型(假设没有友谊关系)不访问,但它们的存在,派生类型的对象包含基本类型的对象。
+0
也注意到派生类可以覆盖声明为虚拟的基类的私有成员函数。派生类不能调用这些成员函数的基本版本,但可以覆盖它们。在这个意义上,派生类继承基类的私有接口。 – YoungJohn 2014-10-02 14:16:22
答
是的,派生类继承其所有基类的成员。
私人,公共和受保护的关键字仅影响其应用于的项目的可访问性。如果在特定的上下文中无法访问某些内容,并且您尝试使用它,则编译器会给您一个错误。
您看到了错误的。基类中的所有内容都由派生类型继承。 – juanchopanza 2014-10-02 12:58:02
私有成员在派生类中是继承的,但不是* visible *。 – 2014-10-02 12:59:24
“基类中的所有东西都是派生类型继承的”我会说:所有基类**中的所有东西都被派生类型继承。这就是为什么你有80个字节 - sizeof(b1)+ sizeof(b2) – borisbn 2014-10-02 13:06:12