我有一个A类,它有一个声明为private的字段val。 我想声明一个B类,它继承自A并具有对val的访问权限。 有没有办法在C ++上做到这一点?
我想这样做是因为我需要重载A的某些功能,而根本不需要更改A代码。
感谢。
答案 0 :(得分:44)
快速回答:你没有。这就是protected
关键字的用途,如果你想授予对子类的访问权限,你想要使用它,而不是其他人。
private
意味着没有人可以访问这些变量,甚至不能访问子类。
如果您根本无法更改A
中的代码,则该变量可能存在public
/ protected
访问方法。否则这些变量不能从子类访问,只有黑客可以帮助(我不鼓励!)。
答案 1 :(得分:16)
基类的私有成员 只能由基本成员函数(非派生类)访问。所以你没有权利甚至没有机会这样做:)
class Base
答案 2 :(得分:8)
好吧,如果您有权访问基类,则可以将B类声明为friend class。但正如其他人所解释的那样:因为你可以,这并不意味着它是个好主意。如果希望派生类能够访问受保护的成员,请使用受保护的成员。
答案 3 :(得分:3)
这是本周的本大师所描述的那样 - GotW #76 - Uses and Abuses of Access Rights。但它应该被视为最后的手段。
答案 4 :(得分:1)
您需要将其定义为protected
。受保护的成员将继承到子类,但无法从外部访问。
答案 5 :(得分:0)
您可以通过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;
}