C++的虚函数

1 多态产生的背景

 希望同一个方法在派生类和基类中的行为是不同的,换句话来说,方法的行为取决于调用该方法的对象。

2 解决多态的两种方法

 1)在派生类中重新定义基类的方法

 2)使用虚方法

3 虚函数的定义

 拥有 Virtual 关键字的函数称之为虚函数

virtual void Click(int id, int row, int col);

 经常在基类中将派生类会重新定义的方法声明为虚方法,方法在基类中被声明为虚的后,它在派生类中将自动成为虚方法。然而,在派生类声明中使用关键字virtual 来指出那些函数是虚函数也不失为一个好方法。

4 为何需要虚析构函数

 《C++ Primer Plus(第六版)》P501

5 有哪些函数可以成为虚函数?那些函数不可以成为虚函数?

 要成为虚函数必须满足两点,一就是这个函数依赖于对象调用,因为虚函数就是依赖于对象调用,因为虚函数是存在于虚函数表中,有一个虚函数指针指向这个虚表,所以要调用虚函数,必须通过虚函数指针,而虚函数指针是存在于对象中的。二就是这个函数必须可以取地址,因为我们的虚函数表中存放的是虚函数函数入口地址,如果函数不能寻址,就不能成为虚函数。

 所以呢,这些函数不能成为虚函数;

1.内联函数:我们都知道内联函数只是在函数调用点将其展开,它不能产生函数符号,所以不能往虚表中存放,自然就不能成为虚函数。

2.静态函数:定义为静态函数的函数,这个函数只和类有关系,它不完全依赖于对象调用,所以也不能成为虚函数。

3.构造函数:都知道只有当调用了构造函数,这个对象才能产生,如果把构造函数写成虚函数,这时候我们的对象就没有办法生    成。更别说用对象去调用了。所以构造函数不能成为虚函数。

 那些函数可以成为虚函数呢?

 普通的成员方法是可以成为虚函数的

 还有析构函数,因为析构函数是为了释放对象的,所以之前我们的对象已经生成,而且析构函数可以取地址,所以可以成为虚函数。

参考资料

《C++ Primer Plus(第六版)》

https://blog.csdn.net/LC98123456/article/details/81143102 作者:我爱橙

上一篇:iOS 杂笔-20(UIView和CALayer的区别与联系)


下一篇:iOS 杂笔-23(区分各种空值)