#include<iostream> using namespace std; class CSample{ public: CSample(){ //构造函数 1 cout<<"Constructor 1 Called"<<endl; } CSample(int n){ //构造函数 2 cout<<"Constructor 2 Called"<<endl; } } int main(){ CSample arrayl[2]; cout<<"stepl"<<endl; CSample array2[2] = {4, 5}; cout<<"step2"<<endl; CSample array3[2] = {3}; cout<<"step3"<<endl; CSample* array4 = new CSample[2]; delete [] array4; return 0; }程序的输出结果是:
class CTest{ public: CTest(int n){ } //构造函数(1) CTest(int n, int m){ } //构造函数(2) CTest(){ } //构造函数(3) }; int main(){ //三个元素分别用构造函数(1)、(2)、(3) 初始化 CTest arrayl [3] = { 1, CTest (1, 2) }; //三个元素分别用构造函数(2)、(2)、(1)初始化 CTest array2[3] = { CTest(2,3), CTest (1,2), 1}; //两个元素指向的对象分别用构造函数(1)、(2)初始化 CTest* pArray[3] = { new CTest(4) , new CTest(1,2) }; return 0; }上面程序中比较容易令初学者困惑的是第 13 行。pArray 数组是一个指针数组,其元素不是CTest 类的对象,而是 CTest 类的指针。第 13 行对 pArray[0] 和 pArray[1] 进行了初始化,把它们初始化为指向动态分配的 CTest 对象的指针,而这两个动态分配出来的 CTest 对象又分别是用构造函数(1)和构造函数(2)初始化的。pArray[2] 没有初始化,其值是随机的,不知道指向哪里。第 13 行生成了两个 CTest 对象,而不是三个,所以也只调用了两次 CTest 类的构造函数。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有