前提摘要:
虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。
虚函数定义:指向 基类 的 指针或引用 在操作它的 多态 类(子类 / 派生类)对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。
使用方法:
1. 只需要在成员函数声明前使用 关键字 "virtual" 将函数声明为虚函数(子类中可加可不加,没加系统会自动判定为虚函数,为了阅读性,建议加上),而函数实现不需要使用关键字 "virtual"。
2. 非 类的成员函数 不能定义为虚函数,类的成员函数中 静态成员 函数和 构造函数 也不能定义为虚函数,但可以将 析构函数 定义为虚函数。实际上,优秀的程序员常常把 基类 的析构函数定义为虚函数。因为,将基类的析构函数定义为虚函数后,当利用 delete 删除一个指向 派生类 定义的 对象指针 时,系统会调用相应的类的析构函数。而不将析构函数定义为虚函数时,只调用基类的析构函数。
测试代码:
- #include <iostream>
- using namespace std;
- class A
- {
- public:
- A(){}
- virtual ~A(){}
- virtual void print();
- };
- void A::print()
- {
- cout << "aaaa" << endl;
- }
- class B:public A
- {
- public:
- B(){}
- ~B(){}
- void print()
- {
- cout << "bbbb" << endl;
- }
- };
- int main()
- {
- A *a1 = new A;
- A *a2 = new B;
- a1->print();
- a2->print();
- return 0;
- }
输出结果:
纯虚函数:1、纯虚函数声明如下: virtual void funtion1()=0;2. 有纯虚函数的类是抽象类,不能生成对象,只能派生。
3. 定义了纯虚函数的类不可实例化; 其派生类没有为该纯虚函数定义实现方法也不可实例化;
来源: http://www.bubuko.com/infodetail-2446063.html