c++ - 如何使用来自另一个分支的类指针访问层次结构一个分支的类的成员?
问题描述
class A
/ \
class B1 class B2
所有类都只有公共成员。
Class A
是公共继承的,包含虚拟成员函数和具有默认 print(cout) 语句的非虚拟成员函数,class B1
并且class B2
只有非虚拟函数,虚拟函数的定义来自class A
.
我想知道如何使用 B1 的指针访问 B2 的所有成员,可以使用哪种类型转换。
例如:
B2 obj_b2;
B1* b1_ptr=&obj_b2;
// Using b1_ptr, access all members of obj_b2
如果是,那么这是否可以进一步扩展到更深的分支,例如:
class A
/ \
class B1 class B2
/ \ / \
class C1 ... ... ...
(从第二个分支访问 等的成员class C1
)
编辑1:
也许这会有所帮助;这是我写的例子:
#include<iostream>
using namespace std;
class A{
public:
virtual void v_f1(){
cout<<"virtual A::v_f1()\n";
}
void f1(){
cout<<"A::f1()\n";
}
};
class B1 : public A{
public:
virtual void v_f2(){
cout<<"virtual B1::v_f2()\n";
}
void v_f1(){
cout<<"A<-B1::v_f1()\n";
}
void f2(){
cout<<"B1::f2()\n";
}
};
class C1 : public B1{
public:
void v_f2(){
cout<<"B1<-C1::v_f2()\n";
}
void f3(){
cout<<"C1::f3()\n";
}
};
class D : public C1{
public:
void f4(){
cout<<"D::f4()\n";
}
};
class B2 : public A{
public:
void v_f(){
cout<<"A<-B2::v_f()\n";
}
void f5(){
cout<<"B2::f5()\n";
}
};
class C2 : public B2{
public:
void f6(){
cout<<"C2::f6()\n";
}
};
int main(){
C2 c2_obj;
C2* c2_obj_ref=&c2_obj;
D* d_ptr = dynamic_cast<D*>(c2_obj_ref);
// This statement gives segmentation fault,
// if commented out, the code works fine.
d_ptr->v_f();
// These work fine
d_ptr->f();
dynamic_cast<C2*>(d_ptr)->f5();
dynamic_cast<C2*>(d_ptr)->f6();
return 0;
}
解决方案
类型的对象B1
没有B2
声明的成员。
如果你试图把一个对象当作它不是的类型,那么你的程序就是格式错误的。
推荐阅读
- visual-studio - 在 Visual Studio 中使用 MINGW
- c# - 加入实体框架时如何根据列检索不同的行?
- css - CSS 动画和生成的内容没有动画
- python - 未找到张量流/工具/pip_package
- vue.js - 发送未通过父级的数据
- sql - 在postgresql表中查找最大条目,sql
- r - 有条件地计算 max(raster) 与栅格堆栈的每个栅格层之间的差异
- php - 将行与月份中的日期完全结合
- reactjs - 在没有 react-router 的 React SPA 中,如何在子组件中渲染父组件?
- javascript - 带有 React Native Navigation 的 SyntaxError