码迷,mamicode.com
首页 > 其他好文 > 详细

虚函数

时间:2015-07-13 00:44:29      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

可用于实现多态公有继承的机制:

  • 在派生类中重新定义基类的方法。
  • 使用虚方法

类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对象。因此,可以用一个数组来表示多种类型的对象。这就是多态性。

 

虚函数要点:

  • 在基类方法的声明中使用关键字virtual可使该方法在基类以及所有的派生类中是虚拟的。
  • 如果使用指向对象的引用或指针来调用虚方法,程序将使用为对象类型定义的方法,而使用为引用或指针类型定义的方法。这称为动态联编。这种行为使得基类指针或引用可以指向派生类对象。
  • 如果定义的类将被用做基类,则应将那些要在派生类中重新定义的类方法声明为虚函数。

注意事项:

  1. 构造函数不能是虚函数。
  2. 析构函数应当是虚函数,除非类不用做基类。
  3. 友元不能是虚函数,因为友元不是类成员,而只有成员才能使虚函数。
  4. 如果派生类没有重新定义函数,将使用该函数的基类版本。
  5. 重新定义隐藏方法。

技术分享

虚函数

标签:

原文地址:http://www.cnblogs.com/happygirl-zjj/p/4641810.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!