首页 理论教育C++程序设计基础教程:虚函数声明

C++程序设计基础教程:虚函数声明

【摘要】:声明虚函数的一般格式如下:virtual函数类型函数名(参数表)其中,用关键词virtual声明的函数称为虚函数。如果一个成员函数被声明为虚函数,这就意味着该成员函数在派生类中可能有不同的实现。动态绑定只能通过指针或引用标识对象来调用虚函数。

声明虚函数的一般格式如下:

virtual函数类型函数名(参数表)

其中,用关键词virtual声明的函数称为虚函数。如果一个成员函数被声明为虚函数,这就意味着该成员函数在派生类中可能有不同的实现。当使用这个成员函数操作指针或引用所标识的对象时,对该成员函数调用采取动态绑定方式,即在运行时进行关联或约束。

动态绑定只能通过指针或引用标识对象来调用虚函数。如果采用一般类型的标识对象来调用虚函数,则将采用静态绑定方式调用虚函数。

C++动态绑定的处理方式仍能实现静态类型检查,换句话说,函数参数类型的错误在编译阶段能够检查出来。

以下是采用动态绑定重新实现例7.1的程序。

上述程序的一次执行结果如下:

本科生收费

学号:101↙

姓名:张颖↙

学 费:5500

住宿费:2200(www.chuimin.cn)

书报费:600

其 他:300

总费用:8600

研究生收费

学号:301↙

姓名:王小华↙

住宿费:2200

书报费:600

其 他:300

总费用:3100

这时看到程序执行结果是正确的,而本程序与例7.1程序的唯一差别是将UnderGraduate类的calTotalFee()和display()两个成员函数设置为虚函数。这样,在调用fee函数时采用动态绑定,也就是说,在调用fee函数时会根据实参是哪个类的对象来调用哪个类的成员函数,对于fee(stu1),由于stu1是UnderGraduate类的对象,后面就调用UnderGraduate类的calTotalFee和display成员函数,对于fee(stu2),由于stu2是PostGraduate类的对象,后面就调用PostGraduate类的calTotalFee和display成员函数。