构造函数与析构函数

 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)    收藏  举报

导航