C++ 数组,类,对象,分开我都懂,但,放一起就WHAT!!!

391 阅读1分钟

AB *p[4]调用几次构造函数?AB b[4]呢?
"动态数组" "静态数组" "动态指针数组" "静态指针数组"

AB类

class AB{
public:
    AB(int y=2){
        x=y;
        total++;
        std::cout << "已调用" << total<< "次"<<std::endl;
    };
    int x;   
    static int total;
};

int AB::total = 0;

1.实例化 ↓4.

    AB a(6);                         
    std::cout <<"会调用1次构造函数"<< std::endl;
    std::cout <<"值:"<< a.x<< std::endl;

2.指向对象的指针 ↓5.

    AB *q;                         //q 存地址变量
    q = new AB();
    std::cout <<"会调用1次构造函数"<< std::endl;
    std::cout <<"值:"<< q->x<< std::endl;
    delete q;

3.静态【对象】数组

    AB s[4];                       //一个【存着类AB的对象的】数组
    std::cout <<"会调用4次构造函数"<< std::endl;
    std::cout <<"值:"<< s[0].x<< std::endl;

4.动态【对象】数组

    AB *d = new AB[4];             //["AB对象","AB对象"...]  AB对象 ↑1.
    std::cout <<"会调用4次构造函数"<< std::endl;
    std::cout <<"值:"<< d->x<< std::endl;
    std::cout <<"值:"<< d[0].x<< std::endl;
    delete[] d;

5.静态【指针】数组

    AB *p[2];                      //["指向AB的指针0","指向AB的指针1"]  指向AB的指针是 ↑2.
    std::cout <<"会调用0次构造函数"<< std::endl;
    for (int i = 0; i<2; i++){
        p[i] = new AB(i);
    }
    std::cout <<"会调用2次构造函数"<< std::endl;
    std::cout <<"值:"<< p[0]->x<< std::endl;
    std::cout <<"值:"<< p[1]->x<< std::endl;
    for (int i = 0; i<2; i++){ 
        delete p[i];
    }

输出结果


已调用1次
会调用1次构造函数
值:6
已调用2次
会调用1次构造函数
值:2
已调用3次
已调用4次
已调用5次
已调用6次
会调用4次构造函数
值:2
已调用7次
已调用8次
已调用9次
已调用10次
会调用4次构造函数
值:2
值:2
会调用0次构造函数
已调用11次
已调用12次
会调用2次构造函数
值:0
值:1

AB *p[4]调用 0 次构造函数,AB b[4] 4 次。

参考资料

C++ 动态对象数组的知识总结