随笔 - 56, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

自定义类及相关的构造与析构函数

读程序:
 1#include<iostream>
 2using namespace std;
 3int cn=0;
 4
 5class myCla
 6{
 7    char cc;
 8    public:
 9    myCla(char ch)
10    {
11        ++cn;
12        cc=ch;
13        cout<<"constructor:cn="<<cn<<",ch="<<ch<<endl;
14    }

15    ~myCla()
16    {
17        --cn;
18        cout<<"destructor:cn="<<cn<<",cc="<<getcc()<<endl;
19    }

20    char getcc()
21    {
22        return cc;
23    }

24}
;
25myCla globalG('G');
26int main()
27{
28    myCla autoA('A');
29    for(int i=0;i<2;++i)
30    {
31        cout<<"---begin block"<<endl;
32        myCla autoB('B');
33        static myCla static5('S');
34        cout<<"---end block"<<endl;
35    }

36    cout<<"---end main"<<endl;
37    return 0;
38}

39
运行结果为:
constructor:cn=1,ch=G
constructor:cn
=2,ch=A
---begin block
constructor:cn
=3,ch=B
constructor:cn
=4,ch=S
---end block
destructor:cn
=3,cc=B
---begin block
constructor:cn
=4,ch=B
---end block
destructor:cn
=3,cc=B
---end main
destructor:cn
=2,ch=A
destructor:cn
=1,ch=S
destructor:cn
=0,ch=G
结果分析:
(1)类的构造函数与析构函数都是特殊的类成员函数。构造函数主要完成对象的初始化工作,而析构函数主要完成对象
撤销前的善后工作。形象地说,当对象诞生和死亡时,将分别调用该对象所属类的构造函数和析构函数。
(2)与"小级别类型变量"的作用域及生存期类似,对象(即"大级别"的类类型的变量)也有各自的作用域及它们的生存期。
如全局性对象(程序中的globalG)将在执行main前被构造,各函数内的局部对象(auto属性),将在说明时被构造。块级别的局部对象
(auto属性者,程序中的autoB),在每次入块后都被重新构造(重新分配空间并初始化),出块时结束生命期(调用析构函数去析构它们)。
块级别的局部对象(static属性者,程序中的staticS),其作用域局部于块,但其生命期与全局性对象相同,只在第一次遇见时分配空间并初始化。

posted on 2009-08-19 09:35 八路 阅读(306) 评论(0)  编辑 收藏 引用 所属分类: C++ 类


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理