C++:虚函数介绍及运用技巧
虚函数使得设计和实现易于扩展的系统成为了可能。程序可以对层次中所有现有类的对象(基类对象)进行一般性处理。
现在我们假设一组形状类(如圆形、正方形、长方形等)都是从基类Shape中派生出来的,在面向对象的程序设计中,我们可能要使每一个这样的类都能绘制其自身的形状,尽管每个类都有自己的Draw函数,但是绘制每种形状的Drew函数是不可能相同的。
但是当需要绘制形状时,不管它是什么形状,把它作为基类Shape的对象处理是最好不过的了。然后我们只需要简单的调用基类Shape的函数Drew,并让程序动态的确定(即在运行中确定)使用哪个派生类的Draw函数。
为了使这种行为可行,我们需要把基类中的函数Draw声明为虚函数。然后在每个派生类中重新定义Draw使之能够绘制合适的形状。
虚函数的声明方法是在基类的函数原型前加上关键字virtual,例如,基类Shape中可能出现:
virtual void draw() const;
这个声明就表明draw是不取参,也不返回数值的常量函数,而且是个虚函数。
这时便可用基类指针或者指明派生类对象并使用该指针调用Draw函数(如shapePr->draw()),则程序会动态的调用该派生类的draw函数,这便称之为动态关联。
如果用名字和圆点成员选择运算符引用一个特定的对象来调用虚函数(如shapeObject.draw()),则被调用的虚函数是在编译时确定的,这便是静态关联。
编程技巧:
1、为了提高程序的清晰性,我们最好在类的每一个层次中显示声明这些虚函数。
2、没有定义虚函数的派生类简单的继承了其直接基类的虚函数。
3、一旦一个函数被声明为虚函数,那么重新定义类时即使没有声明这个虚函数,那么以此为点,在之后的继承类层结构中都是虚函数。
作者 李木
补充:软件开发 , C++ ,