C++ 虚函数畅谈
来源:互联网 发布:美国亚马逊 买书 知乎 编辑:程序博客网 时间:2024/06/10 23:46
0x01:前言
虚函数是C++里最重要的概念之一,并且是判定C++是否入门的一个热门问题。今天这篇文章简单谈谈虚函数。
0x02:虚函数简介
虚函数可以被子类实现函数所覆盖。
virtual是关键字,被定义为virtual的函数才可以被子类覆盖。
虚函数的调用是通过虚函数指针调用。
0x03:虚函数原理
下面展示的代码皆为伪码,主要为说明虚函数编译和调用过程。
class Base{ public: virtual void Play(); virtual void Move(); virtual void Attack(); void EndGame();};
在这里Base类在编译时会生成虚函数表: FunctionPtr* Base::__vtable[3] = {&Base::Play(), &Base::Move(), &Base::Attack()}
在生成Base对象时,会生成虚函数指针 FunctionPtr* Base::__vptr;
class Base{ public: Base():__vptr(__vtable[0]) { } FunctionPtr* __vptr;};
假设如下场景:
Base b;b.Move(); // b.__vptr[1]();
如果通过继承,变的只是虚函数表。
class Derived : public Base{ public: void Move() override;}
此时虚函数表:FunctionPtr* __vtable[3] = {&Base::Play(), &Derived::Move(), &Base::Attack()}
0x04:虚函数性能
对于调用消耗是非常小的,不过对于效率要求非常严苛的使用场景另当别论。效率更多是转化成经济效益计算。提高效率,开发难度和时间本来是此起彼消的。
参考:https://isocpp.org/wiki/faq/virtual-functions
0 0
- C++ 虚函数畅谈
- c ++畅谈
- 畅谈
- 畅谈Perl时间处理函数用法
- 畅谈Perl时间处理函数用法
- 畅谈Perl时间处理函数用法
- 畅谈心情
- 老乡畅谈
- TCP畅谈
- C/C++--虚函数
- 一起和小C畅谈———内存管理那些事
- 【C/C++】纯虚函数
- C/C++, 虚函数表
- C++:虚函数用途
- 虚函数详解(C++)
- 虚函数(C++)
- c++-->虚函数 2
- C++ 虚函数
- java生产者消费者PV操作为中,wait判断条件为何是while不是if疑惑解答
- 排序算法集合 -2
- 在RHEL5、6、7上配置磁盘的udev规则
- 进程间、线程间通信方式总结
- 【Leetcode】17. Letter Combinations of a Phone Number
- C++ 虚函数畅谈
- Cpp_Primer--Chapter8--IO库
- JS map 的一些概念
- <boost-02>如何使用boost::filesystem获取文件夹中的所有文件? how to use boost:: filesystem to get all files path?
- iOS开发 ☞ 键盘风格
- qt ui设计界面 创建信号与槽 原理,
- LruCache源码解析
- SDN controller高可用之路(附带视频demo)
- java线程学习(1)