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

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

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
结果: Time destructor 从结果可以看出,执行的还是基类的析构函数,而程序的本意是希望执行派生类的析构函数。此时将基类的析构函数声明为虚析构函数

  结果:

  Time destructor

  从结果可以看出,执行的还是基类的析构函数,而程序的本意是希望执行派生类的析构函数。此时将基类的析构函数声明为虚析构函数,

virtual ~Time(){

 cout<<"Time destructor"<

}

  结果:

LocalTime destructor

Time destructor

  如果将基类的析构函数声明为虚函数,由该基类所派生的所有派生类的析构函数也自动成为虚函数。

  把基类的析构函数声明为虚函数的好处是,如果程序中delete一个对象,而delete运算符的操作对象是指向派生类对象的基类指针,则系统会调用相应类的析构函数。

  构造函数不能声明为虚函数。

  3.纯虚函数

  virtual void show()=0;//纯虚函数

  这里将show()声明为纯虚函数(pure virtual function)。纯虚函数是在声明虚函数时被“初始化”为0的虚函数。

  声明纯虚函数的一般形式为,

  virtual 函数类型 函数名(参数列表)=0;

  纯虚函数没有函数体;最后的“=0”并不代表函数返回值为0,它只起形式上的作用,告诉编译器“这是纯虚函数”;这个一个声明语句,最后有分号。

  声明纯虚函数是告诉编译器,“在这里声明了一个虚函数,留待派生类中定义”。在派生类中对此函数提供了定义后,它才能具备函数的功能,可以被调用。

  纯虚函数的作用是在基类中为其派生类保留了一个函数的名字,以便派生类根据需要对它进行定义。

  如果在一个类中声明了纯虚函数,而在其派生类中没有对该函数定义,则该函数在派生类中仍为纯虚函数。

  4.抽象类

  将不用来定义对象而只作为一种基本类型用作继承的类,称为抽象类(abstract class),由于它常用作基类,通常称为抽象基类。凡是包含纯虚函数的类都是抽象类。

  如果在派生类中没有对所有的纯虚函数进行定义,则此派生类仍然是抽象类,不能用来定义对象。

  可以定义指向抽象类数据的指针变量。当派生类成为具体类后,就可以用这个指针指向派生类对象,然后通过该指针调用虚函数。

  本文出自 “子 孑” 博客,请务必保留此出处http://zhangjunhd.blog.51cto.com/113473/57543

精彩图集

赞助商链接