置“~”是析构函数,因使用"~"符号(逻辑非运算符),表示它为腻构造函数,加上类名称来定义;
析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命期结束的时候,由系统自动调用。
虚函数是C++多态的一种表现;
例如:子类继承了父类的一个函数(方法),而我们把父类的指针指向子类,则必须把父类的该函数(方法)设为virturl(虚函数)。
使用虚函数,我们可以灵活的进行动态绑定,当然是以一定的开销为代价。
如果父类的函数(方法)根本没有必要或者无法实现,完全要依赖子类去实现的话,可以把此函数(方法)设为virturl函数名=0
我们把这样的函数(方法)称为纯虚函数。
如果一个类包含了纯虚函数,称此类为抽象类
指针与引用的区别
引用:变量的别名;不分配内存空间;定义时必须同时初始化;一旦初始化后其值不能改变;
指针:是一个变量;分配内存空间;定义时可以不必初始化;
指针其实也是一种值传递,不过它传的是地址而已,引用传递是传入栈中偏移
这可以从反汇编后看出来
指针是把变量的地址入堆栈,函数开始出栈后,只能改变指针改向的地址处的内容,而不能改变指针的值
而引用传递压入的是偏移,在函数开始出栈后直接将栈+偏移来操作传入参数,所以引用使用的是同一个对象,不需要额外产生对象的拷贝,提高了效率。
charconst*p和char*constp区别?
charconst*p指针p所指的内容不能改
char*constp指针自己的内容不能改
char str='j';
charstr2='f';
charconst*p=&str;
*p='q'; //不能改
p=&str2; //可以
char*constm=&str;
m = &str2; //不能改
*m = 'e'; //可以
constchar*p与charconst*p是等价的,表示指针指向的内容是不变的!
而char*constp是表示指向P的指针值是不可变的!
const在*之"前"表示内容不变
const在*之"后"表示指针不变
如:
可以这样记: