涉及指针成员变量和多态的非常奇怪的问题

时间:2013-11-25 19:14:23

标签: c++ arrays pointers polymorphism

好的,所以我遇到了一些非常奇怪的问题,即在类中存储一个基类指针数组,然后设置这个基类指针等于一些动态分配的派生类指针。 我的代码太长了,并且在这里发布了GUI调用,因此我会在这里制作一些模拟代码来演示我正在使用的方法

基类 - 基础

class Base
{

public:
    Base(){ // do nothing}
    virtual void SetUI(){ // do nothing}


}

派生类 - 派生

class Derived : public Base
{
public:
    Derived() : Base() { // do nothing}
    virtual void SetUI(){// do nothing}

}

这是一个基本上保存我的程序数据的类,它包含一个指向基类的指针数组。这些指针通过指向动态创建的派生类类型的对象来初始化。

class HelperClass
{
private:
    Base * basearray[2];

public:
    HelperClass()
    {
     basearray[0] = new Derived;
     basearray[1] = new Derived;
    }

    Base * getBaseArray(int key)
    {
    return this->basearray[key];
    }
}

这是我的“主要”,这是一切开始变得怪异的地方。

int main()
{
 HelperClass hold;
 hold.getBaseArray(0)->setUI();
 // NOTHING HAPPENS ABOVE, THE CODE DOESN'T EVEN REACH THIS POINT, IT JUST GET'S LOST SOMEWHERE IN     //THE ABOVE STATEMENT.  i KNOW THIS BECAUSE I PUT AN exit(0) inside the function setUI() for both the   //base and derived class and the program doesn't exit.

// this also does nothing
 if(hold->getBaseArray(0) || !hold->getBaseArray(0))
    exit(0);

return 0;
}

但奇怪的是,如果我执行类似下面的操作,我只是声明一个基类指针并让它指向派生类的动态创建对象,一切正常。

int main()
{
 Base *hold;
 hold = new Derived;
 hold->setUI(); // <- this works polymorphically


return 0;
}

当我尝试使用HelperClass中的基类指针数组时,有没有人知道为什么我的程序停止工作?当我尝试执行getBaseArray(int)时,它不会返回任何内容,这会导致类似

的语句
if(hold->getBaseArray(0) || !hold->getBaseArray(0)) {exit(0);}

不让程序退出,这很奇怪,因为getBaseArray()返回的指针是null或非null,这意味着程序应该退出,无论什么

0 个答案:

没有答案