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

C++ Accessing a protected variable in class A from class C, where C is subclasses of B, which is a subclass of A

本文关键字:子类 其中 受保护 访问 从类 变量      更新时间:2023-10-16

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

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

类B是类a的子类,在其构造函数中,可以随意访问和添加vector

然而,在类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++的限制或因为我的代码?

一如既往的感谢。

ClassB改为:

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

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

解决方案取决于你的要求,你的问题中没有说明。它可以像使用公共继承一样简单:

class ClassB : public ClassA, AnotherClass
另一种选择是给ClassB一个public或protected成员函数,允许修改来自ClassC的vector。

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

为了让你的代码工作,你需要在ClassA的前面加上"protected"或"public"来定义ClassB,就像这样:

class ClassB : protected ClassA, AnotherClass

问题是您没有声明子类classB的继承类型classA。下面的代码可以很好地为我编译。(将继承改为公共类a)

class classA{
  protected:
    int a;
};
class classB : public classA{
  public:
  classB()
  {
    this->a = 0;
  }
};
class classC : public classB
{
  public:
  classC()
  {
    this->a = 1;
  }
};