Q1: C++中virtual与inline的含义分别是什么?
A:
Virtual 虚函数
inline 内联函数
虚函数的特点;如果希望派生类能够重新定义基类的方法,则在基类中将该方法定义为虚方法,这样可以启用动态联编。
内联函数的特点;使用内联函数的目的是为了提高函数的运行效率。
Q2: const 与 #define 的比较 ,const有什么优点?
A:
区别:
1:作用阶段:#define是在编译的预处理阶段起作用
而const是在 编译、运行的时候起作用。
2:#define只是简单的字符串替换,没有类型检查。
而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误
3:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有若干个备份; const定义的只读变量在程序运行过程中只有一份备份。
4: const常量可以进行调试的,define是不能进行调试的,因为在预编译阶段就已经替换掉了
const优点
1:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。
2:有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。
3:const可节省空间,避免不必要的内存分配,提高效率
Q3: 请你谈谈引用和指针的区别。
A:
1 :指针在定义时不用初始化,要分配内存空间,且指向的变量可以改。引用定义时就要初始化,是变量别名不可改,不用分配内存空间。
2 :做参数时,指针传递的是指针地址;引用传递的是变量地址。
3 :指针是间接访问变量,引用是直接访问变量。
4 :有多级指针但没多级引用。
Q4: const关键字?有哪些作用?
A:
1:欲阻止一个变量被改变,可以使用const关键字,在定义const变量时,通常需要对他进行初始化, 因为以后就没机会改变他了.
2:对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
3:在一个函数声明中,const可以修饰形参,表明他是一个输入参,在函数内部不能改变其值;
4:对于类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量
5:对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为”左值”;
Q5: 面向对象的三个基本特征,并简单叙述之?
A:
1:封装: 将客观事物抽象成类,每个类对自身的数据和方法实行protection(private, protected,public);
2:继承: 广义的继承有三种实现形式,
1.1 实现继承(指使用基类的属性和方法而无需额外的编码能力)
1.2 可视继承(子窗体使用父窗体的外观和实现代码)
1.3 接口继承(仅使用属性和方法,实现滞后到子类实现).前两种(类继承)和后一种(对像组合=>接口继承以及纯虚函数)构成了功能复用的两种方式.
3:多态: 是将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给他的子对象的特性以不同的方式运作,简单的说(允许将子类类型的指针赋值给父类类型的指针)
Q6: 请讲一讲析构函数和虚函数的用法和作用?
A:
析构函数:他没有返回类型,没有参数,不能随意调用,也没有重载,只有在类对象的生命周期结束时,系统调用,有释放内存空间的作用.(析构函数可以是虚函数,构造函数不行)
虚函数: 是C++多态的一种表现,使用虚函数,我们可以灵活的进行动态绑定,当然是一定的开销为代价
Q7:在C++中有没有纯虚构造函数?
A:
构造函数不能是虚函数,
只能有虚的析构函数.