通过this->访问抽象基类的受保护数据成员

时间:2016-08-29 14:53:34

标签: c++

访问抽象基类的受保护数据成员时遇到问题。说我有以下结构:

class A {
   public:
       //func_xy()=0;  
       //...
   protected:
       int id;
       //...
};

现在我继承自抽象基类A:

class B: public A {
    public:
        func_xy();

        //...
    private:
        void func_b();
        std::vector<A*> vec_a;
        //...
};    

//...

void B::func_b() {

    A& _a = *vec_a[0];
    //doesn't work, class A has no member named ‘_a‘...
    int id1 = this->_a.id;
    //doesn't work, expected unqualified-id before ‘(’...
    int id2 = this->(_a.id);
}

如果我使用指针而不是引用,则问题仍然存在。 获取受保护的数据成员有什么技巧吗?

1 个答案:

答案 0 :(得分:3)

通过更改

修复了编译错误
    int id1 = this->_a.id;

    int id1 = _a.id;

你会发现它仍然无效。问题是_aA,而不是B。作为B的成员函数,您只有A的基础才能访问B的受保护成员。

因此,您可以轻松访问this->id - 但无法访问id的{​​{1}}。

你需要:

_a