如何理解?
private 继承:
is-implementing-in-terms-of(照此实现):用基类接口实现派生类功能。移除了 is-a 关系。
面向对象教学存在的最大谬误,就是强行用人类逻辑去解释编程语言的概念。
这说明编写教材的人和教课的老师,完全不懂编程。
编程语言的一个最重要的使命,是解决编程的实际问题,它不过是一种工具。而不是为了那些虚头八脑的概念。
如果你观察下各种编程语言,比如C# Java,你会发现,只有C++语言才有三种继承模式。
如果你说这些概念都非常有意义,那么岂不是说C#、Java都是残次品?
这个根本解释不通。
切入正题,说白了,一句话就能说清楚,那就是C++语言允许多继承,也就是一个类拥有多个基类,这是万恶之源
你要明白,当出现多个基类的时候,那么两个不同类的私有成员的名称大概率会冲突——因为是私有成员嘛,本来就是看不到的,谁会去考虑命名的唯一性?
所以来了一个公有继承,一了百了,挡住这些成员名字,视而不见。与此对应,就有了私有继承。
知道在子类中,父类的所有成员都变成私有就行了,
工作四年,目前没有用到过,也没有见过有私有继承的代码,可见不是很重要
【以下回答由 GPT 生成】
私有继承在C++中是一种继承方式,它在实现派生类功能时使用了基类的接口,但同时移除了is-a关系。私有继承通常用于基类实现细节的封装,以支持派生类的实现。具体而言,私有继承将基类的公有成员和受保护成员都变为私有成员,这使得派生类只能通过调用基类的公有函数来间接访问。下面是私有继承的具体解决方案:
首先,我们定义一个基类Base,其中包含一些公有成员和受保护成员,用于实现某种功能:
class Base {
public:
void publicFunction() {
// 基类的公有函数实现
}
protected:
void protectedFunction() {
// 基类的受保护函数实现
}
private:
void privateFunction() {
// 基类的私有函数实现
}
};
接下来,我们定义一个派生类Derived,这个派生类使用私有继承来实现基类接口的细节,并隐藏基类的接口和实现细节:
class Derived : private Base {
public:
void derivedFunction() {
// 派生类的功能实现
publicFunction(); // 可以通过基类的公有函数间接访问基类的成员
protectedFunction(); // 可以通过基类的公有函数间接访问基类的成员
// privateFunction(); // 无法直接访问基类的私有成员
}
};
在派生类Derived中,我们可以通过基类的公有函数来间接访问基类的成员,但无法直接访问基类的私有成员。
私有继承通常适用于派生类需要实现基类接口的细节,但不具有is-a关系,或者派生类需要隐藏基类的接口和实现细节的情况。
希望通过这个解决方案能够帮助您更好地理解C++中的私有继承。