c++ protected误区
程序员文章站
2022-07-13 10:49:22
...
发现以前对protected的用法一直是错误的。
protected的继承的访问权限其实是相对于类的,而不是对象。这么说可能无法理解。看例子:
class Base{
protected:
int a;
public:
Base();
};
class Child{
public:
Child();
test(Child &c){
c.a = 3;
}
test2(Base &b){
b.a = 3;//error
}
};
int
main(){
Child child;
Base base;
child.test();//right
child.test2(b);//error, 因为protected的作用范围其实是相对于类。所以只要是child类的实例都可以在类的范围内直接访问protected成员。
}
test2要想工作得写一个get_a();
Base::get_a(){return a;};
protected的继承的访问权限其实是相对于类的,而不是对象。这么说可能无法理解。看例子:
class Base{
protected:
int a;
public:
Base();
};
class Child{
public:
Child();
test(Child &c){
c.a = 3;
}
test2(Base &b){
b.a = 3;//error
}
};
int
main(){
Child child;
Base base;
child.test();//right
child.test2(b);//error, 因为protected的作用范围其实是相对于类。所以只要是child类的实例都可以在类的范围内直接访问protected成员。
}
test2要想工作得写一个get_a();
Base::get_a(){return a;};