标签:
可用于实现多态公有继承的机制:
类Brass和类BrassPlus如下所示:
class Brass { private: char fullName[MAX]; long acctNum; double balance; public: virtual void WithDraw(double amt); virtual void ViewAcct()const; virtual ~Brass(){} }; class BrassPlus: public Brass { private: double rate; public: virtual void ViewAcct()const; virtual void WithDraw(double amt); };
如果没有使用关键字virtual,程序将根据引用类型或指针类型选择方法;如果使用了virtual,程序将根据引用或指针指向的对象的类型来选择方法。如果ViewAcct()不是虚拟的,则程序的行为如下:
Brass dom("Dominic Banker",11224,4183.45); BrassPlus dot("Dorothy Banker",12118,2592.00); Brass & b1_ref = dom; Brass & b2_ref = dot; b1_ref.ViewAcct();//调用Brass::ViewAcct() b2_ref.ViewAcct();//调用Brass::ViewAcct()
如果ViewAcct是虚拟的,则行为如下:
1 Brass dom("Dominic Banker",11224,4183.45); 2 BrassPlus dot("Dorothy Banker",12118,2592.00); 3 Brass & b1_ref = dom; 4 Brass & b2_ref = dot; 5 b1_ref.ViewAcct();//调用Brass::ViewAcct() 6 b2_ref.ViewAcct();//调用BrassPlus::ViewAcct()
用途:
假设要同时管理Brass和BrassPlus账户,我们无法用同一个数组来保存Brass和BrassPlus对象,但是我们可以创建一个指向Brass的指针数组。这样,每个元素的类型都相同,而且Brass指针既可以纸箱Brass对象,也可以纸箱BrassPlus对象。因此,可以用一个数组来表示多种类型的对象。这就是多态性。
虚函数要点:
注意事项:
标签:
原文地址:http://www.cnblogs.com/happygirl-zjj/p/4641810.html