C ++从类C中访问类A中的受保护变量,其中C是B的子类,B是A的子类

时间:2014-03-30 23:26:35

标签: c++ inheritance protected

我的问题确实说明了一切,但我会重申这个问题。

在A类中,有一个我想要访问的受保护变量(向量)。

B类是A类的子类,在其构造函数中,可以根据需要访问和添加此向量。

但是,在C类(它是A类的子类)中,我想在它的构造函数中添加这个向量,但编译器告诉我。

这是我的代码:

A类:

class ClassA
{
protected:
    std::vector<Object *> myVector;
};

B组:

class ClassB : ClassA, AnotherClass
{
public:
    ClassB()
    {
        this->myVector.push_back(new Object);
    }
}

C类:

class ClassC : public ClassB
{
public :
    ClassC()
    {
        this->myVector.pushBack(new Object);
    }
}

有人能告诉我,由于C ++的限制或我的代码,我正在做什么是不可能的吗?

一如既往地谢谢。

4 个答案:

答案 0 :(得分:1)

ClassB私下继承ClassA。这意味着所有继承的成员都是privateClassB,因此无法在ClassC中访问。

解决方案取决于您的要求,这些要求未在您的问题中说明。它可以像使用公共继承一样简单:

class ClassB : public ClassA, AnotherClass

另一种方法是给ClassB一个公共或受保护的成员函数,允许修改ClassC中的向量。

答案 1 :(得分:1)

ClassB更改为:

class ClassB : public ClassA, AnotherClass
{
public:
    ClassB()
    {
        this->myVector.push_back(new Object);
    }
}

答案 2 :(得分:0)

问题是ClassB只“导入”了ClassA的私有成员。

为了使您的代码能够正常工作,您希望在ClassA的前面加上“受保护”或“公共”,以便为您定义ClassB,如下所示:

class ClassB : protected ClassA, AnotherClass

答案 3 :(得分:0)

问题是你没有为子类classB声明什么类型的继承classA。以下代码为我编译就好了。 (将继承更改为public classA)

class classA{
  protected:
    int a;
};

class classB : public classA{
  public:
  classB()
  {

    this->a = 0;
  }

};

class classC : public classB
{
  public:
  classC()
  {
    this->a = 1;

  }
};