私人成员是否也被继承?
为什么get()函数能够读取变量n
#include <iostream>
using namespace std;
class base
{
int n;
public:
void get()
{
cin >> n;
}
int ret()
{
return n;
}
};
class inh : public base
{
public:
void show()
{
cout << "hi";
}
};
int main()
{
inh a;
a.get();
a.show();
return 0;
}
无论n是否为私有变量,它都能正常工作。
答案 0 :(得分:1)
所有基类的成员,无论是私有成员还是公共成员,都将被继承(否则继承将是固有-双关语意-破坏),但是它们保留了私有访问修饰符。
由于在您的示例中继承本身是公共的,因此inh
具有base
的公共成员,因为它是自己的公共成员-并且a.show()
完全合法。
答案 1 :(得分:0)
可以调用访问私有数据成员的函数。 private
只是意味着您无法访问课程之外的数据成员本身
答案 2 :(得分:0)
您不会在主目录中访问任何私人成员:
int main()
{
inh a;
a.get(); // << calling a public method of the base class. OK!
a.show(); // calling a public method of the inh class. OK!
return 0;
}
您只能从基类成员中访问基类的私有成员:
class base
{
int n;
public:
void get()
{
cin >> n; // writing in my private member. OK!
}
int ret()
{
return n; // returning value of my private member. OK!
}
};
这可能会导致主要问题:
inh a;
a.n = 10; // error
base b;
b.n = 10; // error