构造函数与析构函数
1 /* 构造函数与析构函数 */
2
3 #include<iostream>
4
5 // 所有的类 默认都有一个构造函数与析构函数
6 // 构造函数和析构函数可以重载,没有返回值
7 class myclass
8 {
9 public:
10 int num;
11 public:
12 myclass()// :num(4) num初始化第一种方式
13 {
14 num = 10;// num初始化第二种方式
15 std::cout << "class create" << std::endl;
16 }
17
18 myclass(int data)// 构造函数可以重载
19 {
20 std::cout << "class create by data" << std::endl;
21 num = data;
22 }
23
24 ~myclass()
25 {
26 std::cout << "class delete" << std::endl;
27 }
28 };
29
30 void run()
31 {
32 //myclass myclass1(10);
33 //myclass myclass1 = 101;
34 //std::cout << myclass1.num << std::endl;
35
36 myclass *p = new myclass(102);
37
38 //myclass *p (new myclass(102));
39 //p(new myclass(105));// 不可以
40
41 std::cout << (*p).num << std::endl;
42
43 }
44
45 int main()
46 {
47
48 run();
49
50 int num = 4;
51 int data(4);
52
53 std::cin.get();
54 return 0;
55 }
构造函数函数与析构函数的顺序:
1 /* 构造函数函数与析构函数的顺序 */
2
3 class fushu
4 {
5 fushu()
6 {
7
8 }
9
10 ~fushu()
11 {
12
13 }
14 };
15
16
17 fushu::fushu()
18 {
19 std::cout << "fushu构建" << std::endl;
20 }
21
22 fushu::~fushu()
23 {
24 std::cout << "fushu销毁" << std::endl;
25 }
26
27 // 被包含的最先分配 最后释放
28 // 包含别人的 最后分配 最先释放
29
30 class math
31 {
32 public:
33 fushu fushu1;
34 math()
35 {
36 std::cout << "math构建" << std::endl;
37 }
38
39 ~math()
40 {
41 std::cout << "math销毁" << std::endl;
42 }
43 };
44
45 void go()
46 {
47 math math1;
48 }
49
50 int main()
51 {
52 go();
53
54 std::cin.get();
55 return 0;
56 }
explicit:
1 /* explicit */
2
3 #include<iostream>
4 #include<array>
5
6 class classobj
7 {
8 public:
9 int num;
10
11 public:
12 // explicit 锁定 避免调用时发生类型转换
13 explicit classobj(int data)
14 {
15 this->num = data;
16 std::cout << "被构造" << num << std::endl;
17 }
18
19 ~classobj()
20 {
21 std::cout << "被销毁" << num << std::endl;
22 }
23 };
24
25 int main()
26 {
27 //classobj num = 5;// 赋值号,类型转换,被锁定
28 classobj data(5);
29
30 // 创建对象必须合适的构造函数
31 //classobj obj(0);
32 // classobj *p = new classobj;
33 //classobj *p = new classobj(5);
34
35 //classobj *p = new (classobj(5)[5]);
36
37 // c++ 风格数组作用:构造函数带参数的情况下使用
38 classobj obj(0);
39 classobj *p = new classobj(5)
40 std::array<classobj,2> myarray = {obj,*p};
41
42 std::cin.get();
43 return 0;
44 }
长风破浪会有时,直挂云帆济沧海
posted on 2015-06-04 14:43 Dragon-wuxl 阅读(133) 评论(0) 收藏 举报
浙公网安备 33010602011771号