C++虚函数的初步基本理解
来源:互联网 发布:佛山网络推广公司 编辑:程序博客网 时间:2024/06/05 02:22
简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。下面来看一段简单的代码class A{public:void print(){ cout<<”This is A”<<endl;}};class B:public A{public:void print(){ cout<<”This is B”<<endl;}};int main(){ //为了在以后便于区分,我这段main()代码叫做main1A a;B b;a.print();b.print();}通过class A和class B的print()这个接口,可以看出这两个class因个体的差异而采用了不同的策略,输出的结果也是我们预料中的,分别是This is A和This is B。但这是否真正做到了多态性呢?No,多态还有个关键之处就是一切用指向基类的指针或引用来操作对象。那现在就把main()处的代码改一改。int main(){ //main2A a;B b;A* p1=&a;A* p2=&b;p1->print();p2->print();}运行一下看看结果,结果却是两个This is A。问题来了,p2明明指向的是class B的对象但却是调用的class A的print()函数,这不是我们所期望的结果,那么解决这个问题就需要用到虚函数class A{public:virtual void print(){ cout<<”This is A”<<endl;}//现在成了虚函数了};class B:public A{public:void print(){ cout<<”This is B”<<endl;}//这里需要在前面加上关键字virtual吗?};毫无疑问,class A的成员函数print()已经成了虚函数,那么class B的print()成了虚函数了吗?回答是Yes,我们只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。所以,class B的print()也成了虚函数。那么对于在派生类的相应函数前是否需要用virtual关键字修饰,那就是你自己的问题了。现在重新运行main2的代码,这样输出的结果就是This is A和This is B了。现在来消化一下,我作个简单的总结,指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。
0 0
- C++虚函数的初步基本理解
- OpenCL的初步基本理解
- 对虚函数的初步理解
- opencl初步基本理解
- 对Oracle分析函数的初步理解
- 内存映射函数mmap的初步理解
- Python函数修饰符的初步理解
- 初步理解多态性和虚函数
- 初步理解getopt函数
- SG函数的基本理解
- Animator状态机的初步理解和基本使用
- C++:虚函数理解
- c与指针初步理解
- main函数和thread线程类的初步理解
- 关于球谐函数一些初步的理解
- c语言的基本函数
- 子网掩码的初步理解
- javabean的初步理解
- 2017.排序问题
- java单元测试总结
- linux 统计日志
- (C基础)指针基础的乱七八糟 2017.3.12
- UML类图与类的关系详解
- C++虚函数的初步基本理解
- 虚函数中调用虚函数要注意的地方
- java的堆和栈
- 闲话git merge 与 git rebase 的区别
- favicon.ico介绍,网页图标的制作&动态网页图标
- 数据库学习日记x
- 一方库、二方库、三方库说明
- JAVA WEB从入门到精通day14 JAVA三层架构、登录注册实战演练
- 初识freemarker