首页 > 解决方案 > 如何使用来自另一个分支的类指针访问层次结构一个分支的类的成员?

问题描述

              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;
}

标签: c++c++11inheritancecasting

解决方案


类型的对象B1没有B2声明的成员。

如果你试图把一个对象当作它不是的类型,那么你的程序就是格式错误的。


推荐阅读