c++继承指针
c++ inheritance pointer
我很难描述我的问题。我有两个类,我会说Base_A
和Derived_A
。从名称可以看出,Derived_A
类是由Base_A
派生而来的。同样在我的程序中,我还有另外两个类Base_B
和Derived_B
(也有继承)。类Base_A
包含Base_B
的对象,类Derived_A
包含Derived_B
的对象。
class Base_A {
public:
Base_A() {}
virtual ~Base_A() {}
Base_B b_;
Base_B* pointer_;
void init() {
b_ = Base_B();
pointer_ = &b_;
pointer_->setValue(1);
}
void print() {
pointer_->getValue();
}
};
class Derived_A: public Base_A {
public:
Derived_A() {}
virtual ~Derived_A() {}
Derived_B b_;
Derived_B* pointer_;
void init() {
b_ = Derived_B();
pointer_ = &b_;
pointer_->setValue(2);
pointer_->increaseValue();
}
};
class Base_B {
public:
Base_B() {}
virtual ~Base_B() {}
int value_;
void setValue(int value) {
value_ = value;
}
void getValue() {
cout << "Base_B: " << value_ << endl;
}
};
class Derived_B: public Base_B {
public:
Derived_B() {}
virtual ~Derived_B() {}
void increaseValue() {
value_++;
}
};
int main() {
Derived_A derived_A = Derived_A();
derived_A.init();
derived_A.print();
return 0;
}
你可以看到A的每个类都有一个B类的对象和指向这个对象的指针。我的问题是,当我调用函数print()
时,它不需要Derived_B* pointer_
,而是尝试访问不存在的Base_B* pointer_
。我怎么能在程序中说,它应该根据类获取指针呢?或者我需要在Derived_A
类中声明Base_B* pointer_
,如:
Base::pointer_ = pointer_;
也许有其他的方法或算法我的问题?
非常感谢。
"但尝试访问Base_B*
指针_,该指针不存在"
如果DerivedA
没有正确初始化BaseA
,则DerivedA
不符合继承的"isA"规则,设计需要更改。从表面上看:
- 不要在派生类中重用
b_
、pointer_
这样的名字。它只是令人困惑,你没有获得任何价值。 设置init()为虚拟的。 - 让DerivedA::init()显式调用BaseA::init() 设置指针为虚方法。
注意,虚方法使用了"协变返回类型"。
class BaseA
{
public:
virtual BaseB* pointer() { return &b_; }
// etc.
};
class DerivedA : public BaseA
{
public:
virtual DerivedB* pointer() { return &b_; }
// etc.
};
如果Base_A::init()被调用,Base_A不会有一个指向Base_B的指针吗?为什么不初始化基类呢?
相关文章:
- 关于C++中具有多重继承"this"指针的说明
- 共享指针继承,而不先显式强制转换
- 派生类是从基类继承 v 指针并仅使用它,还是也有自己的 v 指针?
- 使用智能指针附加的继承对象的深层复制
- 嵌套类、继承和C++中的共享指针
- 删除C++中的继承类指针数组
- 具有虚拟指针和继承的 CPP 类大小
- 钻石继承虚拟成员铸造与指针
- 当键是虚拟继承中涉及的基类指针时,对 std::unordered_map 项的访问崩溃
- 当依赖关系和依赖关系都是多态时,在哪个继承级别存储依赖关系指针?
- cppyy 继承包含智能指针的类
- 作为模板参数的成员函数指针在继承的成员函数上失败,如何以及为什么?
- 是否可以将成员作为指针继承
- C++14 不能调用从唯一指针继承的类的复制构造函数或运算符 =
- 是无限的Typedef函数指针继承
- 是否可以从 C++11 智能指针继承并覆盖相关运算符?
- 继承:使用从父指针继承的方法
- 使用智能指针继承的皮条
- 是覆盖返回类型所需的指针-继承
- 调用未从BaseClass指针继承的DerivedClass函数