《面向对象程序设计》自学方法指导
来源: 发布时间:2006-5-29 17:04:30 点击:
 
  如果我们以中间类circle为基类,派生出一个ellispe类的话,就可以通过rotateshape(int)来使椭圆旋转一个角度。中间类的rotateshape只是从基类到派生类路径中的一个连接点,保证ellispe能使用到基类shape的虚函数界面。
  虚函数与滞后联编
  多态性通过虚函数来实现,而虚函数的调用过程与滞后联编(或动态联编)密切相关,只有滞后联编才能实现多态性。也就是说,如果破坏了滞后联编,就不能调用虚函数,也就无法实现多态性。
  在下列情况下,可能会破坏虚函数的滞后联编环境:
  ①从前面的例子可以看出,为了使用滞后联编。必须通过指针或引用来调用虚函数。如果通过非指针或非引用类型的对象来调用虚函数,则不会有滞后联编的效果。在这种情况下.编译程序无法自动判别对象是否为其派生类的类型,而直接调用指定类的成员函数。
  ②当在程序中以作用域运算符来调用虚函数时,将破坏滞后联编。编译程序无需判别它是否是派生类中的成员函数,因为作用域运算符已明确地要求编译程序调用指定类的成员函数。
  ③当在基类的构造函数和析构函数中调用虚函数时。也会破坏滞后联编。例如。假定已定义了派生类的对象,由于派生类需要先调用基类的构造函数以进行初值设定。因此程序流程首先进入基类的构造函数;但是,此时派生类部分尚未定义完整,故在基类的构造函数下无法联编派生类中的虚函数,只能进行静态联编。大家可以看自学教材中的例5.4,该例对此讲得很清楚。
  《面向对象程序设计》内容丰富,涉及面广,知识点多。自学时不可以面面俱到,对于本自学参考中提到的重点难点,希望大家仔细的学习,反复的理解。大家在看书时如有不懂的地方,通过参考本书,能使大家在重点难点的理解上有所突破,那就是我们最大的安慰了。


本新闻共7页,当前在第7页  1  2  3  4  5  6  7