1.C++中不能重载的六个运算符号:.,::,?,sizeof,typeid,*
2.构造函数是否可以是虚函数?析构函数呢?
答:构造函数不可以,虚函数是借助于虚函数表,而且是通过虚函数指针找到虚函数表,然而虚函数指针存在于对象之中,要有个对象才行,而调用构造函数的时候对象还没有建立,没有建立怎么会有虚函数指针呢?所以不可以。
析构函数可以当一个父类的析构函数被声明为虚函数的时候,我们delete一个指向子类对象的父类指针的时候,实际调用的是子类的析构函数,但是子类析构函数会自动引发父类的析构函数的调用,从而使子类特有的部分和从父类继承的部分能够释放,我们一般把父类的析构函数声明成虚函数,尽管这个析构函数什么都不做。(最好是把基类的析构函数定义为虚函数,否则当用基类去创建一个指向派生类的指针,当其释放的时候基类中的东西可能不会被释放,造成内存泄漏)
3.虚函数是否可以是内联函数
答:不可以,虚函数是通过虚函数表,这是在运行的时候确定的,然而内联函数的替换是在编译阶段,编译的时候不知道调用哪一个虚函数所以不可以。(编译时静态的,运行是动态的)
5静态成员函数是否可以是虚函数?
答:不可以,静态成员函数不属于哪个类,而虚函数通过虚函数指针找到虚函数表,虚函数依赖于对象指针,而静态函数不属于某各类,所以不可以。
6虚函数表和虚函数指针在运行,编译时建立?
答:虚函数表是在编译时建立,在编译的时候把类中的虚函数地址放到虚函数表中,构成一个指针数组。
虚函数指针是在运行时建立的,他也是类的隐藏的成员,他在调用构造函数的时候执行,构造函数执行完以后虚函数指针初始化好(构造函数在运行时调用的)
7.const与defeine的区别?
答:const有数据类型而ddefine没有编译器对const进行类型安全检查,而对define只是简单的字符替换,没有安全检查,而且会引起错误。
8.什么是虚函数?纯虚函数?什么是抽象类?纯抽象类?纯抽象类的作用?
答:虚函数:被virtual修饰的成员函数。(构造函数,静态成员函数和全局函数不能被声明为虚函数)
纯虚函数:virtual 函数返回值 函数名()= 0
抽象类:有纯虚函数的类是抽象类。(不能创建抽象类的对象,当做一个接口类使用)
纯抽象类:除了构造函数与静态成员函数意外都是纯虚函数的类。
9.new、delete、malloc、free关系?
答:delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。
10.delete与 delete []区别?
答:当做用于一个数组时,delete只调用一次析构函数,而delete[]释放每一个的内存,调用每一个析构函数。Delete与new配合,delete[]与new[]配合。
11.函数指针?
答:函数指针的生命更只需呀把指针替换函数名就可以。
void * ( * (*fp1)(int))[10];
float (*(* fp2)(int,int,int))(int);
int (* ( * fp3)())[10]();
分别表示什么意思?
1.void * ( * (*fp1)(int))[10]; fp1是一个指针,指向一个函数,这个函数的参数为int型,函数的返回值是一个指针,这个指针指向一个数组,这个数组有10个元素,每个元素是一个void*型指针。
2.float (*(* fp2)(int,int,int))(int); fp2是一个指针,指向一个函数,这个函数的参数为3个int型,函数的返回值是一个指针,这个指针指向一个函数,这个函数的参数为int型,函数的返回值是float型。
3.int (* ( * fp3)())[10](); fp3是一个指针,指向一个函数,这个函数的参数为空,函数的返回值是一个指针,这个指针指向一个数组,这个数组有10个元素,每个元素是一个指针,指向一个函数,这个函数的参数为空,函数的返回值是int型。
网上搜集的和自己总结的,如有错误,敬请指正。