C++构造函数和数组

//   构造函数和数组
#include<iostream>
using namespace std;/*是一个语句*/
class  CTest {
public :
	int a;
	int m_=-1, n_=-1;
public:
		/*没有返回值且和类同名的构造函数可以定义在类里头
		(区别于类的成员函数:普通成员函数一定有类型的返回值,函数名称也可以各种各样).*/
	CTest(int n) { cout << "构造函数(1)" << endl; a = 1; }           //构造函数(1)
	CTest(int n, int m) { cout << "构造函数(2)" << endl; a = 2; n_ = n; m_ = m; }    //构造函数(2) 
		CTest() { cout << "构造函数(3)" << endl; a = 3; }                 //构造函数(3)
};
int main(){
	CTest  array1[3] = {
		1,/*1作为参数传递给构造函数以初始化array[0]:调用了(1)*/
		CTest(1,2)/*说明构造函数也可以被人为的调用(调用了(2),初始化了array2[1]*/
		/*第三个位置没有指定初始化参数,调用默认构造函数(3)初始化了array2[2]*/
	};	// 三个元素分别用构造函数(1),(2),(3)初始化 
	cout << "array1[3] ended!" << endl;
	/*一个数组中的不同对象元素可以指定使用不同的构造函数类初始化,未必都是用同一个构造函数,由传入的参数(类型+数量)来决定.*/
	CTest  array2[3]={ 
		CTest(2,3), /*调用了(2) 初始化了array2[0];注意(2,3)实参列表是为了调用对应的构造函数(2)(这个构造函数需要两个实参来初始化一个array2[]数组的一个元素*/
		CTest(1,2),/*调用了(2)初始化了array2[1]*/
		1/*调用了(1)初始化了array2[2]*/
	}; //三个元素分别用(2),(2),(1)初始化 
	cout << "array2[3] ended!" << endl;

	/*这是一个指针数组:*/
	CTest * pArray[3] = { 
		/*new运算符会返回一个新申请的内存空间的地址*/
		new CTest(4), /*调用了(1)*/
		new CTest(1,2)/*调用了(2)*/
		/*pArray[2]的地址没有得到初始化,pArray本身又不是存储CTest类对象的数组,不会生成第三个对象.*/
	};
	delete pArray[0], pArray[1];
     //两个元素指向的对象分别用 (1),(2)初始化 
	/*先对pArray[0]和pArray[1]进行了初始化,把它们初始化为指向动态分配的CTest对象的 指针(地址)。
而这两个动态分配出来的CTest对象,又分别是用构造函数(1)和构造函数(2)初始化的。
至于pArray[2]没有初始化,其值是随机的,不知道指向哪里。
所以该数组最终生成了两个CTest对象,而不是3个所以也只调用CTest类的构造函数两次。*/
	cout << "array3[3] ended!" << endl;

	return 0;
}


  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值