[b][size=medium]1、定义[/size][/b]
它允许函数调用与函数体之间的联系在运行时才建立,即在运行时才决定如何动作。虚函数声明的格式:
virtual 返回类型 函数名(形参表)
{
函数体
}
[b][size=medium]2、虚函数做几点补充说明:[/size][/b]
(1)因为虚函数使用的基础是赋值兼容,而赋值兼容成立的条件是派生类之从基类公有派生而来。所以使用虚函数,派生类必须是基类公有派生的;
(2)定义虚函数,不一定要在最高层的类中,而是看在需要动态多态性的几个层次中的最高层类中声明虚函数;
(3)虽然在上述示例代码中main()主函数实现部分,我们也可以使用相应图形对象和点运算符的方式来访问虚函数,如:rectangcle.showArea(),但是这种调用在编译时进行静态联编,它没有充分利用虚函数的特性。只有通过基类对象来访问虚函数才能获得动态联编的特性;
(4)一个虚函数无论配公有继承了多少次,它仍然是虚函数;
(5)虚函数必须是所在类的成员函数,而不能是友元函数,也不能是静态成员函数。因为虚函数调用要靠特定的对象类决定该激活哪一个函数;
(6)内联函数不能是虚函数,因为内联函数是不能在运行中动态确定其位置的即使虚函数在类内部定义,编译时将其看作非内联;
(7)构造函数不能是虚函数,但析构函数可以是虚函数;
[b][size=medium]3、纯虚函数[/size][/b]
纯虚函数是在声明虚函数时被“初始化”为0的虚函数。不定义对象而只作为一种基本类型用作继承的类,称为抽象类。凡是包含纯虚函数的类都是抽象类。抽象类的作用是作为一个类族的共同基类。
4、虚函数特性
1)虚函数是c++众多运行时多态特性中开销最小,最常用的机制。
它允许函数调用与函数体之间的联系在运行时才建立,即在运行时才决定如何动作。虚函数声明的格式:
virtual 返回类型 函数名(形参表)
{
函数体
}
[b][size=medium]2、虚函数做几点补充说明:[/size][/b]
(1)因为虚函数使用的基础是赋值兼容,而赋值兼容成立的条件是派生类之从基类公有派生而来。所以使用虚函数,派生类必须是基类公有派生的;
(2)定义虚函数,不一定要在最高层的类中,而是看在需要动态多态性的几个层次中的最高层类中声明虚函数;
(3)虽然在上述示例代码中main()主函数实现部分,我们也可以使用相应图形对象和点运算符的方式来访问虚函数,如:rectangcle.showArea(),但是这种调用在编译时进行静态联编,它没有充分利用虚函数的特性。只有通过基类对象来访问虚函数才能获得动态联编的特性;
(4)一个虚函数无论配公有继承了多少次,它仍然是虚函数;
(5)虚函数必须是所在类的成员函数,而不能是友元函数,也不能是静态成员函数。因为虚函数调用要靠特定的对象类决定该激活哪一个函数;
(6)内联函数不能是虚函数,因为内联函数是不能在运行中动态确定其位置的即使虚函数在类内部定义,编译时将其看作非内联;
(7)构造函数不能是虚函数,但析构函数可以是虚函数;
[b][size=medium]3、纯虚函数[/size][/b]
纯虚函数是在声明虚函数时被“初始化”为0的虚函数。不定义对象而只作为一种基本类型用作继承的类,称为抽象类。凡是包含纯虚函数的类都是抽象类。抽象类的作用是作为一个类族的共同基类。
4、虚函数特性
1)虚函数是c++众多运行时多态特性中开销最小,最常用的机制。