C ++对象指针练习

时间:2015-11-13 11:14:29

标签: c++ pointers

嗨,我是C语言的新手,有C的知识。我正在尝试学习对象指针和在C ++上尝试模式。 我有2节课,并试图学习纪念品。首先是管理器,它保存我的对象的动态数组。

Manager.h:

#ifndef MANAGER_H
#define MANAGER_H
#include "MyObject.h"

class Manager
{
    public:
        Manager();
        ~Manager();
        MyObject *objArray;
        int _top;
        MyObject topObj();
        void addObj(MyObject newObj);
};

#endif // MANAGER_H

Manager.cpp:

#include "Manager.h"

Manager::Manager()
{
    objArray = NULL;
    _top = -1;
}

Manager::~Manager()
{
    delete[] objArray;
}

MyObject Manager::topObj()
{
    return objArray[_top]; //Will throw error if empty
}

void Manager::addObj(MyObject newObj)
{
    MyObject *newArray = new MyObject[++_top]();
    for(int i=0; i<_top; i++){
        newArray[i] = objArray[i];
    }
    newArray[_top] = newObj;
    objArray = newArray;
}

并在我的主要

int main(int argc, char **argv)
{
    Manager *mptr = new Manager();
    MyObject *optr = new MyObject(); 
    mptr->addObj(*optr); //won't work 
    //changing object's properties
    mptr->addObj(*optr);
    return 0;
}

但这不起作用,当我尝试addObj方法时它停止工作,我找不到任何错误,你介意告诉我我的错误在哪里

1 个答案:

答案 0 :(得分:2)

函数Manager::addObj中的第一行是错误的,您想这样做:

MyObject *newArray = new MyObject[++_top];

另外,不确定抛出错误的意思(函数Manager::topObj中的注释)。如果您认为如果_top为-1则会抛出异常,那么您就错了。您将获得访问冲突。如果您要提供有关您遇到的错误(崩溃)的更多详细信息,那将是一件好事。