C++之关于虚函数和多态的分析和补充
前文:《Essential C++》笔记之漫游:面向对象编程思维
同时推荐一篇总结得非常清晰的博文:C++ 子类继承父类纯虚函数、虚函数和普通函数的区别
不说废话,直接上程序:
例一(未用虚函数,这里没有实现函数重载)
代码:
//小问学编程
#include<iostream>using namespace std;class Base
{public:int f(int i){cout<<"f(int):";return i+1;}
};class Derived:public Base
{public:double f(double d){cout<<"f(double):";return d+1.3;}
};int main()
{Derived* pd=new Derived;cout<<pd->f(2)<<'\n';cout<<pd->f(2.3)<<'\n';return 0;
}
例二(未用虚函数,实现函数重载)
代码:
//小问学编程
#include<iostream>using namespace std;class Base
{public:int f(int i){cout<<"f(int):";return i+1;}
};class Derived:public Base
{public://make every f from Base available in this classusing Base::f;double f(double d){cout<<"f(double):";return d+1.3;}
};int main()
{Derived* pd=new Derived;cout<<pd->f(2)<<'\n';cout<<pd->f(2.3)<<'\n';return 0;
}
例三(未用虚函数,尝试实现函数重写)
代码:
//小问学编程
#include<iostream>using namespace std;class Base
{public:void mf(){cout<<"Base::mf"<<endl;}
};class Derived:public Base
{public:void mf()//override non-virtual function{cout<<"Derived::mf"<<endl;}
};int main()
{Derived d;//use dofferent pointers to point same objectBase* pb=&d;Derived* pd=&d;pb->mf();pd->mf();return 0;
}
例四(使用虚函数,实现多态)
代码:
//小问学编程
#include<iostream>using namespace std;class Base
{public:virtual int f(int i=1)const{cout<<"f(int):";return i+1;}
};class Derived:public Base
{public:virtual int f(int i=2)const{cout<<"f(int):";return i+100;}
};int main()
{Base* pa=new Base;cout<<pa->f()<<'\n';cout<<pa->f(3)<<'\n'<<endl;Base* pb=new Derived;cout<<pb->f()<<'\n';cout<<pb->f(3)<<'\n'<<endl;Derived* pc=new Derived;cout<<pc->f()<<'\n';cout<<pc->f(3)<<'\n'<<endl;return 0;
}
C++之关于虚函数和多态的分析和补充相关推荐
- C++中虚函数与多态实现
多态,什么是多态?在计算机语言中,多态就是指一个接口或者方法,有多种展现形态.在C++中,通过父类指针调用子类方法,可以让父类指针有多种形态. C++中实现多态的方式有:虚函数,重载,模板,绑定等.此 ...
- C语言面向对象编程(三):虚函数与多态
在< C++ 编程思想>一书中对虚函数的实现机制有详细的描述,一般的编译器通过虚函数表,在编译时插入一段隐藏的代码,保存类型信息和虚函数地址,而在调用时,这段隐藏的代码可以找到和实际对象一 ...
- 子类重写父类虚函数_C/C++编程笔记:关于C++的虚函数和多态,你真的了解吗?...
前言 本章节主要针对于C++中的虚函数和多态做一个详细介绍. 虚函数 虚函数的长相其实很简单,在C++类型用virtual修饰的函数就是虚函数,如下代码: 虚函数对于本类的影响:存在虚函数类的内存会多 ...
- C++虚函数实现多态的机制
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105043638 虚 ...
- C++ 面向对象(二)多态 : 虚函数、多态原理、抽象类、虚函数表、继承与虚函数表
目录 多态 多态的概念 多态的构成条件 虚函数 虚函数的重写 协变(返回值不同) 析构函数的重写(函数名不同) final和override final override 重载, 重写, 重定义对比 ...
- C++编程思想:继承与虚函数以及多态
文章目录 简介 实现虚函数多态的技术原理 对象切边 析构函数和构造函数中的虚函数 使用继承的类的析构函数应该使用虚函数修饰符 简介 继承与虚函数与多态是浑然一体的三个概念,父类中虚函数可以表现出多态特 ...
- 初入c++(六)虚函数实现多态,虚析构函数,虚函数表和多态实现机制,纯虚函数。
1.c++多态的概念以及用途. 1.1虚函数实现多态 通过基类指针只能够访问派生类的成员变量,不能够访问派生类的成员函数. 解决问题的办法:使用虚函数(virtual function),只需要在函数 ...
- (转) 用虚函数实现多态
http://www.cnblogs.com/nihaoCPP/p/4422682.html 用虚函数实现多态 在理解了面向对象的继承机制之后,我们知道了在大多数情况下派生类是基类的"一种& ...
- (八)C++学习 | 虚函数和多态的基本概念
文章目录 1. 虚函数 2. 多态 3. 基于多态的实例 3.1 魔法门之英雄无敌 3.2 几何形体处理程序 4. 总结 参考 1. 虚函数 在类的定义中,前面带有关键字virtual的成员函数称为虚 ...
最新文章
- 在线绘图|差异分析——在线做时序分析
- 《LeetCode力扣练习》第5题 C语言版 (做出来就行,别问我效率。。。。)
- 超图软件:以用户价值为源点做精准化的研发
- c++(和opencv)如何把局部变量变成全局变量的功能
- ios服务器需要开启ipv6的支持,针对iOS审核要求为应用兼容IPv6
- C# 数组增加元素_C#的集合类型及使用技巧
- 【C、C++】ctype.h、cctype中的isnumber()函数和isdigit()函数的区别
- 【大数据课堂000】今天开课了每天更新一集
- Linux如何查看所有的用户和组信息
- VC++实现ip数据包分析
- php tp框架,TP框架
- TerraSolid工具试用系列3----TerraModel从点云生成并导出DEM或DSM备注
- java贴图技术坦克世界_坦克世界游戏图像设置技巧 如何提高FPS
- 解决Google Earth谷歌地球无法连接服务器问题
- ANSYS APDL学习(3):ANSYS APDL 导入x_t格式模型并受力分析范例
- mysql 开源聊天系统_轻量级的开源企业聊天软件 喧喧聊天(界面很不错)
- 钉钉小程序如何判断其当前环境
- 矩阵的求秩:rank( )
- MicroLib微库和ARM标准C库:usart使用中printf重定向引起的问题
- 计算机网络篇—《自顶向下方法》学习笔记