c++ - 初始化对象数组

标签 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();
        }
};

这不对吗?

最佳答案

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

关于c++ - 初始化对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20719731/

相关文章:

c++ - 对取消引用的 NULL 指针的引用是否会在 C++ 中创建或访问时产生 UB

c++ - 使用迭代器查找元素的位置

c++ - 声明具有相同args的两个构造函数的最理想的方法是什么?

c++ - 为什么我不能在类中为静态变量设置值?

Java:如何实现类的切换?

c++ - 使用相同的初始化列表构造数组的所有元素的 DRY 方法?

c++ - boost::任意数字

c# - 交换矩阵行的最佳方式?

python - C : python-like shortcuts? 中的字符串列表

PHP 删除数组键