初始化对象数组

时间:2013-12-21 13:55:40

标签: c++ arrays class object initializing

我想初始化一个数组。没有编译错误,但是当我运行程序时,它显示第一个cout然后停止运行。

这是我的代码:

class A {
    string first_name ;
    string last_name;
    int ID;
public:
    virtual void print ()=0;
};

class B :public A{
    string phone_number;

    .......
    void print(){
        ........
    }
};

class D{
    A** a;
    int size;
public:
    D(){
        size = 10;
        a = new A *[size];
        for(int i = 0 ; i<size ; i++){
            a[i] = NULL;
        }
    }

    void Add(){
        for(int i = 0 ; i<size ; i++){
            A * a2 = a[i];
            B * b  = dynamic_cast<B*>(a2);
            int id;
            cout<<"enter the id";
            cin>>id
            b->set_ID(id);
            // i did the same (cout , cin statements) for the first name and last name.
            b->set_first_name();
            b->last_name();
        }
};

这不正确吗?

1 个答案:

答案 0 :(得分:1)

您分配sizeA*个,但实际上并没有让这些指针指向任何位置。 他们没有初始化。编辑:现在你只是将它们设置为NULL。您需要分配一些A个对象,并将其地址分配给a的每个元素。但是,我认为你没有充分的理由动态分配指针数组 - 为什么不把a声明为A* a[10];? (或者更好的是,使用std::vectorstd::array