您的位置:首页 > 编程语言 > C语言/C++

c++基础知识梳理(2)

2015-11-15 19:56 851 查看
1、构造函数与析构函数的总结:

a)无论是构造函数还是析构函数,我们都应该把他们视作是一种回调函数;

b)构造函数和析构函数自身并不对类的成员数据做任何初始化或堆空间的清理工作;

c)析构函数本什么都不做,只是到了对象的空间将要销毁的时间点,

提示程序员是否要编写一些代码来清理曾经申请过的堆空间。

d)在析构函数中,程序员只需要考虑对申请过的堆空间进行释放,

而本对象本身占用的无论是栈空间还是全局空间系统都会自动清理的。

2、类成员变量的生命期:

a)类成员函数(在对象构造之后)被各个成员函数都可以调用,貌似C语言对全局变量的调用。

b)和对象的生命期相同,只要对象没有失效对象内的成员变量一直有效。

c)类对象内的成员变量的生命期开始时间是,对象定义时也是构造函数执行时。

d)类对象内的成员变量生命期结束时间是,对象析构函数执行时。

例如:

int main()

{

    SList List;//目前对象生命期是,从main函数开始到main函数结束

.....
return 0;

}

3、类对象的生命期:(具体有以下4种情况):

a)对于全局定义的对象,每当程序开始运行,在主函数main(或WinMain)接受程序控制权之前,

就调用全局对象的构造函数,整个程序结束时调用析构函数。

b)对于局部定义的对象,每当程序流程到达该对象的定义处就调用构造函数,

在程序离开局部变量的作用域时调用对象的析构函数。

c)对于关键字static定义的局部变量,当程序流程第一次到达该对象定义处调用构造函数,

在整个程序结束时调用析构函数。(应该让它和全局变量同时构造就最好了)

d)对于用new运算符创建的对象,每当创建该对象时调用构造函数,当用delete删除该对象时,调用析构函数。

(发生时间不确定,根据调用时间来确定,有可能比局部对象生命期长也可能比局部对象短)

全局变量 ->静态变量->堆变量->栈内变量(临时变量)

4、类(class)说明:

结构体在C语言中只能存放成员变量,在C++语言中结构体还有以下新功能:

a、struct除了对成员变量管理外还新增了成员函数,在C语言中struct不可以有成员函数。

b、struct新增了权限管理,在C语言中struct连public的关键字也不能识别。

c、struct新增的友元是对成员变量的开辟一种特殊的权限。

d、struct新增了静态成员变量,当然函数也有静态成员函数。struct对于静态和成员变量都支持。

以上区别是针对C编译器中的结构体的对比。实际上,类(class)和结构体(struct)在C++编译器中几乎完全一样。
只有成员缺省权限不同,struct缺省是公有权限,class缺省是私有权限

1、私有权限与共有权限:

a)私有成员函数和私有成员变量,只限于在本类的成员函数中调用;

b)私有成员函数和私有成员变量,被禁止在全局函数和其他类成员函数中调用;

c)构造函数和析构函数如果是私有的,将无法在类的外部(包括栈、堆和全局)定义对象。

2、在C++软件开发中成员权限选择:

a)严谨的软件工程:每个类的成员缺省全是私有,逼不得已公开的才公开;

b)开放的软件工程:每个类的成员缺省全是公有的,一般没什么私有的;

c)某些类本身就是做接口类或者通用类的全部公有的;

d)如果是自己编写开发的功能类,我个人推荐使用严谨的软件工程;

3、类对象做成员变量的构造和析构顺序:

a)类内的类对象先构造,按照类内对象定义顺序先后构造;

b)类内对象都构造完成后,(外层的)类自身才开始执行构造;

c)(外层的)类自身先析构完成之后类内的类对象在逐一析构;

d)析构顺序与构造顺序相反,是先进后出的顺序;

4、类(class)说明:

结构体在C语言中只能存放成员变量,在C++语言中结构体还有以下新功能:

a、struct除了对成员变量管理外还新增了成员函数,在C语言中struct不可以有成员函数。

b、struct新增了权限管理,在C语言中struct连public的关键字也不能识别。

c、struct新增的友元是对成员变量的开辟一种特殊的权限。

d、struct新增了静态成员变量,当然函数也有静态成员函数。struct对于静态和成员变量都支持。

以上区别是针对C编译器中的结构体的对比。实际上,类(class)和结构体(struct)在C++编译器中几乎完全一样。

只有成员缺省权限不同,struct缺省是公有权限,class缺省是私有权限

(整理自吕鑫c++教程)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: