【摘要】:声明虚函数的一般格式如下: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成员函数。
相关推荐