龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++:虚函数与抽象类(3)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
结果: Base's fun(). Derived's fun(). 【3】C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数(符合2中定义的函数)都自动成为虚函数。 【

  结果:

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;

}

精彩图集

赞助商链接