虚函数
l 虚函数是一种在基类定义为virtual的函数,并在一个或多个派生类中再定义的函数。虚函数的特点是,只要定义一个基类的指针,就可以指向派生类的对象。
注:无虚函数时,遵循以下规则:C++规定,定义为基类的指针,也能作指向派生类的指针使用,并可以用这个指向派生类对象的指针访问继承来的基类成员;但不能用它访问派生类的成员。
l 使用虚函数实现运行时的多态性的关键在于:必须通过基类指针访问这些函数。
l 一旦一个函数定义为虚函数,无论它传下去多少层,一直保持为虚函数。
l 把虚函数的再定义称为过载(overriding)而不叫重载(overloading)。
l 纯虚函数:是定义在基类中的一种只给出函数原型,而没有任何与该基类有关的定义的函数。纯虚函数使得任何派生类都必须定义自己的函数版本。否则编译报错。
l 纯虚函数定义的一般形式:
Virtual type func_name(参数列表)=0;
l 含有纯虚函数的基类称为抽象基类。抽象基类又一个重要特性:抽象类不能建立对象。但是抽象基类可以有指向自己的指针,以支持运行时的多态性。
l 虚函数范例:
#include <iOStream>
#define ECHO(str) std::cout << str
#define ECHOLN(str) std::cout << str<< std::endl
/* run this program using the consolepauser or add your own getch, system("pause") or input loop */
class Base{
public:
virtual void who(){
ECHOLN("我是基类!");
}
};
class deriv_1:public Base{
public:
voidwho(){
ECHOLN("我是子类deriv_1");
}
};
class deriv_2:public Base{
public:
void who(){
ECHOLN("我是子类deriv_2");
}
};
int main(int argc, char** argv) {
classBase *b,b0;
classderiv_1 d1;
classderiv_2 d2;
b= &b0;
b->who();
b= &d1;
b->who();
b= &d2;
b->who();
}
输出:
我是基类!
我是子类deriv_1
我是子类deriv_2
相关阅读
拥有 Virtual 关键字的函数称之为虚函数 虚函数的作用是实现动态绑定的,也就是说程序在运行的时候动态的的选择合适的成员函数 那