如何构建派生类?
现有类A
class A
{
   char p[3];
   virtual void visit(){};
}
class B
{
   A a;
   do();
}
void B::do()
{
  a.visit();
}我希望能把C派生自A,D派生于B,在D中访问父类方法do是调用的是C中自己的visit,请问怎样实现?是这样吗?
class C::public A
{
  void visit()
}class D::pulblic B
{
  
}

解决方案 »

  1.   

    不可以的, 你的CLASS B 中已经定死使用 A 了,
    CLASS C连实例化的机会都没有。
      

  2.   

    class D 和 class C 
    一点关系都没有,我认为不能实现,
    要实现就
    class B
    {
    public:
      B(){pa= NULL};
       A* pa;
       do();
    }
    void B::do()
    {
     if(a)
      a->visit();
    }这样你才有可以实现
    class D : public B
    {
       D(){pa = new C;};
    }
      

  3.   

    在类B的声明中将A改为A*,并在类D中加入一个构造函数。
    class B
    {
      A* pa;
      do();
    }class D:public B
    {
      D(A* p){pa = p};
    }
    那么构造D时只要传入C型的指针就行了。