c++私有成员函数继承可以被继承吗

2024-12-21 16:34:22
推荐回答(3个)
回答1:

准确地说,不可以。
基类的私有成员函数和私有成员变量是一样的,只有该类内部的其他成员函数可以调用,对外是封蔽的。但是有一种情况是例外。派生类继承了基类的公有函数,但是这个基类中的公有函数调用了基类中的私有成员函数。这个时候,派生类调用基类的公有函数同时,也就调用了基类中的私有成员函数。但是请注意,我说的是调用,并非继承,就像这个东西不能给我,所以不是我的,我可以借来用,但是不管怎么用,这东西都是你的而不是我自己的,这么说明白吗?下面给你一段程序,你看一下就明白了:
#include
using namespace std;
class A
{
public:
void output(); //基类的公有函数
private:
void output2(); //基类私有函数
};
void A::output() //基类的公有函数调用了类自身的私有函数
{
output2();
}
void A::output2() //基类的私有成员函数定义,输出函数名
{
cout<<"output2"<}
class B:public A B只继承了A类的公有函数,不继承私有函数
{
};
int main()
{
B b;
b.output(); /*访问了B类的公有函数output,该函数是从A类继承来的,也就等于访问了A类的公有函数,而该函数调用了A类的私有函数,因此等于b调用了A类的调用函数,但是是间接的调用。
return 0;
}
////运行结果输出如下
output2

回答2:

不可以!! 你说的继承是什么个继承???
如果说基类的私有成员被父类继承了,那我是不是也可以说别的不相干的类的成员,也被你继承了??
一楼说的继承,应该是引用,不是继承。继承意味着你得到了。引用意味着,是别人的,你没得到,但你可以间接使用。

回答3:

如果子类继承基类指的是子类拥有了基类的可以调用的数据成员和方法,那么,确实,子类不能继承基类的私有成员函数。
但,从物理结构上来说,子类里面确实含有基类的私有成员。
看以下的例子:
#include
using namespace std;

class A
{
private:
int a;
void funa(){cout<<"A"<};

class B:public A
{
public:
int b;
void funb(){cout<<"B"<};

class C
{
public:
static int& c;
int b;
};

int main()
{
class A tmpA;
class B tmpB;
class C tmpC;
cout<}
/*输出结果:
4
8
4
*/