C++虚函数和多态性的关系【virtual】之二
来源:互联网 发布:周杰伦忘词 知乎 编辑:程序博客网 时间:2024/05/21 17:28
C++虚函数和多态性的关系【virtual】之二
在我上一篇的文章中,我把我对虚函数和多态性的关系发表了出来,经过这些天的思考、探讨和查资料,现在我有了更深一层的理解,现记录在此,如大家有更好的理解,也请大家不吝赐教【我上一篇博文的地址是:C++虚函数和多态性的关系【virtual】之一】
在上一篇的博文中,我说:如果没有虚函数【也就是virtual声明的函数】,那么C++的多态性就无法解释了,所以说,虚函数使C++具有了多态性!
经过这些天的探讨,在此表示这句话是有点问题的。首先,多态性的有无,和虚函数没有必然的联系,我们只能说,在基类里声明虚函数,这只是多态性的表现形式。【有关虚函数的探讨,我将在后面另写一篇文章】
下面,我们要先理解多态性的概念:不同的对象收到同一消息可以进行不同的响应,产生完成不同的结果。
好,下面我先上代码:
- #include <iostream>
- using namespace std;
- class Base
- {
- public:
- virtual void test()
- {
- cout<<"Base"<<endl;
- //printf("Base\n");
- }
- protected:
- private:
- };
- class A:public Base
- {
- public:
- void test()
- {
- cout<<"Base--A"<<endl;
- //__super::test();
- }
- protected:
- private:
- };
- class B:public Base
- {
- public:
- void test()
- {
- cout<<"Base--B\n"<<endl;
- }
- protected:
- private:
- };
- void funcall(Base* base)
- {
- base->test();
- }
- int main()
- {
- Base* base = new Base();
- funcall(base); //Base
- base = new A();
- funcall(base); //A
- base = new B();
- funcall(base); //B
- return 0;
- }
其输出的结果是:
class Base 是基类,class A 和class B继承与class Base。这三个就是不同的对象,当三个不同的对象接收到同一个消息是:test(),其做出了不同的响应,这就是函数的多态性。
其实,我感觉用现实的事物做比喻这就更加形象:不同的哺乳动物有不同的呼吸方式,但是不管怎么样,我们先把呼吸这个抽象的概念放在一个基类里面,然后我们再将其具体化,猫和狗的呼吸方式,就是两种多态性的表现。
- C++虚函数和多态性的关系【virtual】之二
- C++虚函数和多态性的关系【virtual】之二
- C++虚函数和多态性的关系【virtual】之一
- virtual(虚函数)和多态性
- c++--多态性和虚函数
- C++(不用virtual)模拟虚函数来表现出多态性
- 多态性(二)——动态多态性之虚函数
- C#virtual详解,virtual和构造函数的问题
- 多态性和虚函数
- 虚函数和多态性
- 虚函数和多态性
- 虚函数和多态性
- 多态性和虚函数
- 多态性和虚函数
- 多态性和虚函数
- 多态性和虚函数
- 多态性和虚函数
- 虚函数和多态性
- pvcreate提示:Device /dev/sdc3 not found (or ignored by filtering)
- 互联网系统中的利器thrift(一)简介
- NDK Makefile文件中LOCAL_LDLIBS和LOCAL_CFLAGS介绍
- SQLServer 2008 R2附加数据库
- 远程用户登录的问题
- C++虚函数和多态性的关系【virtual】之二
- SQL DML 和 DDL
- ASP.NET页面间数据传递的方法
- Runtime Error(ACCESS_VIOLATION)
- Install FFmpeg and x264 on Ubuntu Lucid Lynx 10.04 LTS
- SQL注入——网络安全问题不容忽视!(一)
- c2-1-begin-v2-frm_10126-10199渲染日志
- Linux crontab 命令格式与详细例子
- 前端知名播客