| class Container |
| { |
| public: |
| virtual double& operator[](int) = 0; virtual int size() const = 0; |
| virtual ̃Container() {} |
| |
| |
| }; |
| |
| void use(Container& c) |
| { |
| const int sz = c.size(); |
| for (int i=0; i!=sz; ++i) cout << c[i] << '\n'; |
| } |
| class Vector_container : public Container |
| { |
| public: |
| Vector_container(int s) : v(s) { } |
| double& operator[](int i) { return v[i]; } |
| int size() const { return v.size(); } }; |
| class List_container : public Container { |
| public: |
| List_container() { } |
| |
| double& operator[](int i); |
| int size() const { return ld.size(); } |
| }; |
| double& List_container::operator[](int i) { |
| for (auto& x : ld) { |
| if (i==0) return x; |
| −−i; } |
| throw out_of_range("List container"); } |
| void h() { |
| List_container lc = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; |
| use(lc); } |
| void g() { |
| Vector_container vc {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}; |
| use(vc); } |
g()和h()中的use调用给Container &c绑定了不同的对象,他们分别动态绑定到Vector_container和List_container的operator[]成员上
因此,Container对象必包含runtime选择正确函数的信息
编译器将虚函数的名字转换成函数指针表中对应的索引值,这个表称为虚函数表.
空间开销:每个类有一个vtbl,类的每个对象有一个额外的指针

更详细内容见:http://c.biancheng.net/view/vip_2300.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!