从类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
我的问题确实说明了一切,但我只是重申这个问题。
在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
。这意味着所有继承的成员都是private
到ClassB
,因此不能在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;
}
};
相关文章:
- 继承期间显示未知行为的子类
- 通过指向指针数组的指针访问子类的属性
- 从父类方法返回子类对象
- c++, 在子类中,如何在没有对象的情况下访问父类的方法?
- 将父类对象强制转换为子类的问题
- 避免在C++中重复子类定义
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 如何初始化矢量的模板化子类
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 有没有办法按值将纯抽象类的所有子类传递给 C++ 中的函数?
- 使用子类覆盖基类中定义的函数
- 子类地址等于虚拟基类地址?
- 将子类方法声明为基类的友元
- C++子类共享变量?
- 如何检查模板专用化是否是基本模板的子类?
- C++有没有办法强制重写一组方法,如果其中一个方法在子类中具有重写?
- 创建子类的多个实例,其中只有一个超类实例
- 我们如何有证据表明,声明虚拟函数的类是2个字节,其中一个不超过一个未声明,而在子类中
- 是否有可能编写一个抽象类,其中构造函数选择适当的子类在c++中实例化
- 从类C访问类a中的受保护变量,其中C是B的子类,B是a的子类