访问继承中的私有成员
access private members in inheritance
我有一个类a,它有一个声明为私有的字段val。我想声明一个类B,它继承了a并且可以访问val。有办法在c++上实现吗?
我想这样做,因为我需要重载A的一些函数,而不改变A的代码。
谢谢。
快速回答:你不需要。这就是protected
关键字的作用,如果您想授予对子类的访问权限,而不授予其他子类的访问权限,则需要使用该关键字。
private
意味着没有人可以访问这些变量,甚至是子类。
如果您根本不能更改A
中的代码,则可能存在该变量的public
/protected
访问方法。否则,这些变量不能从子类中访问,只有黑客才能提供帮助(我不鼓励这样做!)。
基类 的私有成员只能由基类成员函数访问(不能由派生类访问)。所以你没有权利甚至没有机会这样做:)
class Base
- public :任何人都可以访问
- private :只能被基成员函数访问(不允许)派生类)
- protected :可以被基成员函数和派生成员函数访问类
嗯,如果你有访问基类的权限,你可以将类B声明为友类。但正如其他人解释的那样:因为你可以,并不意味着这是一个好主意。如果您希望派生类能够访问受保护的成员,请使用受保护的成员。
这是可行的,正如本周大师- GotW #76 -访问权的使用和滥用所描述的那样。但这应该是最后的手段。
需要将其定义为protected
。受保护的成员继承给子类,但不能从外部访问。
可以通过继承a的成员函数访问基类a的私有成员
#include<iostream>
using namespace std;
class A{
int a;
public:
A(){};
A(int val){a=val;};
int get_a(){//To access a private variable it must be initialized here
a=10;
return a;
}
};
class B: public A{
int b;
public:
B(){};
B(int val){b=val;};
void get(){
cout<<get_a();
}
};
int main(){
A ob1(2);
cout<<ob1.get_a()<<endl;
B ob2(4);
ob2.get();
return 0;
}
相关文章:
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如何从另一个文件继承私有成员变量和公共函数
- C++继承更改成员
- 继承和友元函数,从基类访问受保护的成员
- 删除C++继承中虚拟类成员的代码重复
- 成员包含其他继承类的继承类?
- 如何定义一个没有重复代码的继承的 const 类成员函数?
- 打印所有继承的类成员变量和方法
- 如何在复杂继承中访问静态成员变量
- enable_if继承的成员函数的名称查找错误
- 初始化依赖于子类的继承类的常量类成员
- 继承:调用基类的成员和方法
- 类设计:类成员继承自同一基类
- 使用 CRTP 进行选择性静态成员继承
- 具有'using'的模板模板成员继承
- 结构绑定:与公共数据成员(继承的基类)结合
- 为什么C++继承不允许基类的公共成员继承到派生类的私有成员?
- 静态成员继承和保护
- 是否可以检查是否为类定义了成员函数,即使该成员继承自未知基类
- 混合模板/非模板继承分类和成员继承