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