我是靠谱客的博主 正直毛巾,这篇文章主要介绍C++构造函数和数组,现在分享给大家,希望可以做个参考。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// 构造函数和数组 #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; }

最后

以上就是正直毛巾最近收集整理的关于C++构造函数和数组的全部内容,更多相关C++构造函数和数组内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部