继承的类对象如何使用私有数据成员
How private data member is used by an inherited class object?
私有成员也是继承的吗?
为什么 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 是私有变量的事实如何,它都能正常工作。
基
类的所有成员,私有和公共都是继承的(否则继承本质上是 - 双关语 - 破坏(,但它们保留私有访问修饰符。
由于示例中的继承本身是公共的,因此inh
base
的公共成员作为自己的公共成员 - a.show()
是完全合法的。
调用访问私有数据成员的函数是可以的。 private
只是意味着您无法在类之外访问数据成员本身
您不访问主中的任何私有成员:
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
相关文章:
- 使用指针访问数组中的对象数据成员
- 是否可以使用右值初始化数据成员?
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- C++ 使用派生类方法更改基类数据成员
- 如何使用数据成员填充派生类的对象到基类的指针数组中
- 使用 delete [] 运算符取消分配类中数据成员的内存
- 如何在C++中使用类对象访问指针数据成员
- 使用 lambda 函数初始化静态数据成员
- 当使用嵌套类功能时,使用非静态数据成员的使用无效,但是当函数未固定时可以
- 使用矢量指标对非静态数据成员的使用无效
- 错误:非静态类数据成员的使用无效
- 错误:非静态数据成员的使用无效,在此范围内未声明变量
- 使用const变量时,非静态数据成员的使用无效
- Clang:错误:非静态数据成员的使用无效
- C++对非静态数据成员的使用无效
- Arduino错误(C++):非静态数据成员的使用无效
- C++类的Qt类数据成员在使用之前是否应该初始化
- 非静态数据成员的使用无效
- 非静态数据成员的使用无效
- 非静态数据成员的使用无效