使用基指针来使用派生对象函数

时间:2015-02-19 23:33:08

标签: c++ pointers polymorphism

如何让我的Base指针实例化派生对象并使用其功能?有没有办法像java一样输入这个? 请考虑以下示例代码:

int main(){
    cBase *pBase = 0;
    if (1 < 2)
    {
        pBase = new cDerived;
    }
}

class cBase
 {public:
     virtual void printMe()
          {
             std::cout << "printed cBase" << endl;
           }
};

class cDerived: public cBase
{public:
    virtual void printMe()
         {
            std:: cout << "printed cDerived" << endl;
          }
};

然而当我这样做的时候;它给了我一个错误“Expression必须有类类型。”

cBase *pBase = 0;
    if (1 < 2)
    {
        pBase = new cDerived;
        pBase.printMe();
    }

2 个答案:

答案 0 :(得分:1)

像这样修复

#include <iostream>
using namespace std;

class cBase
 {
    public:
        virtual ~cBase() {};
        virtual void printMe()
        {
         std::cout << "printed cBase" << endl;
        }
};

class cDerived: public cBase
{public:
    virtual void printMe()
         {
            std:: cout << "printed cDerived" << endl;
          }
};

int main(){
    cBase *pBase = 0;
    if (1 < 2)
    {
        pBase = new cDerived;
        pBase->printMe();
        delete pBase;
    }
}

要修复的步骤。

  1. 在声明maincBase类之后移动cDerived函数或在main之前向前声明这些类。

  2. pBase.printMe()更改为pBase->printMe()。由于pBase是一个指针,因此在访问其成员之前必须取消引用它。 pBase->printMe()就像(*pBase).printMe()

  3. 的简写

    另外还有其他一些内务管理。删除pBase对象,因为要使用指向基类(cDerived)的指针删除派生类(cBase),必须声明基类析构函数为virtual,或者{{当你真的希望在这里调用cBase析构函数时,删除pBase时将调用析构函数。

答案 1 :(得分:0)

在C ++中,为了到达指向类/结构的指针的方法/字段,你必须使用 - &gt;操作