C++学习笔记-virtual method

C++学习笔记-virtual method

虚函数或虚方法(virtual method)在CPP13章第3节首次提到。

在通过引用指针而不是直接用对象调用方法时,如果基类的方法没有使用关键词 virtual ,程序将根据引用类型或指针类型选择方法;如果使用了virtual,程序将根据引用或指针指向的对象类型来选择方法。

通俗来讲,如果要在派生类中重新定义基类方法的话,最好在基类中定义为虚方法。析构函数一般也定义成虚方法。不然使用指针或引用时可能会错误地调用方法(通过对象的话不会)。

用法:

  1. virtual 只用于原型声明中,不用于定义中。
  2. 构造函数不能是虚函数。构造函数与其他函数的继承机制不同。从存储空间角度看,如果构造函数是虚函数的话,继承的子对象需要一个指向虚函数表的指针,但是在构造函数执行前对象还没有实例化,就不会有地方来存储这个指针,也就找不到虚函数表,进而没有构造函数的地址,无法执行。
  3. 析构函数应该是虚函数。因为析构函数应当释放子类的新成员的内存(如果有的话)
  4. 友元不能是虚函数,因为友元不是类成员。

主要参考CPP的第13章。

猜你喜欢

转载自www.cnblogs.com/amaduse/p/10704930.html