题:(4)
类成员函数的重载、覆盖和隐藏区别?
答案:
a.成员函数被重载的特征:
b.覆盖是指派生类函数覆盖基类函数,特征是:
c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
题(5)
请说明C++中的多态性,并详解虚函数机制
答案:
多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。
C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数。
多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的,就是说地址是早绑定的。而如果函数调用的地址不能在编译器期间确定,需要在运行时才确定,这就属于晚绑定。
多态的作用是为了接口重用。
虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。
虚函数表实际上是一个函数指针的数组,每个虚函数占用这个数组的一个位置。一个类只有一个虚函数表,不管它有多少个实例。
派生类有自己的虚函数表,派生类的虚函数表与基类的虚函数表有相同的函数排列顺序(即包含基类虚函数表),同名的虚函数被放在两个数组的相同位置上(即派生类的虚函数覆盖掉基类的虚函数)。
在创建类实例的时候,编译器还会在每个实例的内存布局中增加一个vptr字段,该字段指向本类的虚函数表,存在于对象实例中最前面的位置。通过这些手段,编译器在看到一个虚函数调用的时候,就会将这个调用改写!
更详细的解析
题(6)
请说明将“引用”作为函数返回值类型的格式、好处和需要遵守的规则
答案:
格式:
<!-- lang: cpp -->
类型标识符 &函数名(形参列表及类型说明){ //函数体 }
好处:在内存中不产生被返回值的副本。
规则:
原文:http://my.oschina.net/hoolev/blog/397604