C++:虚函数与抽象类(3)
结果:
Base's fun().
Derived's fun().
【3】C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数(符合2中定义的函数)都自动成为虚函数。
【4】定义一个指向基类对象的指针变量,并使其指向同一类族中的某个对象。通过该指针变量调用此函数,此时调用的就是指针变量指向的对象的同名函数。
1.3声明虚函数的限制
【1】只能用virtual声明类的成员函数,使它成为虚函数,而不能将类外的普通函数声明为虚函数。
【2】一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同参数(个数与类型)和函数返回值类型的同名函数。
【3】静态成员函数不能是虚函数,因为静态成员函数不受限于某个对象。
【4】inline函数不能是虚函数,因为inline函数是不能在运行中动态确定其位置的。即使虚函数在类的内部定义,编译时,仍将其视为非inline的。
【5】使用虚函数,系统要有一定的空间开销。当一个类带有虚函数时,编译器会为该类构造一个虚函数表(virtual function tanle,vtable),它是一个指针数组,存放每个虚函数的入口地址。
2.虚析构函数
class Time{
public:
Time(int=0,int=0,int=0);
~Time(){
cout<<"Time destructor"< } protected: int hour; int min; int sec; }; class LocalTime:public Time{ public: LocalTime(int=0,int=0,int=0,string="+8"); ~LocalTime(){ cout<<"LocalTime destructor"< } protected: string zone; }; Time::Time(int h,int m,int s):hour(h),min(m),sec(s){} LocalTime::LocalTime(int h,int m,int s,string z):Time(h,m,s),zone(z){} int main(){ Time *p=new LocalTime;//指向派生类 delete p; system("PAUSE"); return EXIT_SUCCESS; }
- 上一篇:C++:类型数据间的转换
- 下一篇:就地移动栈数据





