C++中知识点
1. static
在C语言中,有如下作用:
1) 在函数体内,static修饰的变量值在函数调用过程中维持不变。
2) 在模块内(函数体除外),static修饰的变量(本地全局变量)作用域只在本模块内。
3) 在模块内,static修饰的函数,作用域只在本模块内部。
在C++语言中,有如下作用:
1) 成员变量:静态成员变量(数据成员)——所有对象一份数据
2) 静态变量初始化须在类外。int A::i = 0;
3) 成员函数:静态成员函数。A::fun();
4) 静态成员函数不能访问非静态成员变量。(先有类才有对象)
5) 静态内容是属于类的,非静态内容是属于对象的。
6) C++中static修饰的成员变量是以全局变量的形式存在,不占类的内存。
注:一个空类占一个字节,以保证创建的对象占用不同的内存(对象唯一的)。
2. Const
Const 意味着“只读”。
1) const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令
2) 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。
3) 编译器通常不为普通const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,使得它的效率也很高。
4) 可以节省空间,避免不必要的内存分配。
3. 重载(overload)和重写(override,“覆盖”)的区别?
重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
重写:是指子类重新定义父类虚函数的方法。
从实现原理上来说:
重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。
重写:和多态真正相关。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚绑定)。
4. C++是不是类型安全的?
不是。两个不同类型的指针之间可以强制转换(用reinterpret cast)。C#是类型安全的。