c++ protected误区

发现以前对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;};

posted @ 2013-11-14 15:11  黑暗遊侠  阅读(168)  评论(0编辑  收藏  举报