博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类的多态(虚函数)
阅读量:7198 次
发布时间:2019-06-29

本文共 1027 字,大约阅读时间需要 3 分钟。

(个人笔记,看不懂莫怪)

 

多态 在程序运行的过程中才能决定调用什么方法,声明基类的指针,利用该指针指向任意一个子类的对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

类中的多态就是派生类对同基类的方法进行了重写,然后程序根据上下文信息来决定使用哪个方法。

在基类base 和派生类 first中,如果在first类中对基类的一个函数input()进行了重写,

如果出现

first one

base *P = &one;

P->input()

这种情况的时候,那么指针P指向的函数是基类base的input()函数;

那当我们希望使用的派生类的函数是,我们就在基类的input()函数前加上关键字  virtual

如果使用了virtual ,则程序根据引用或者指针指向的对象的类型来选择方法,否则的话程序会根据引用或者指针的类型来选择方法。

编译器会为有虚函数的类维护一个虚函数表,这个虚函数表是一个一维数组,里面存这每个虚函数的内存地址。

同时当对象调用构造函数时会自动生成一个虚表指针,虚表指针指向虚函数表,当调用虚函数时有虚表指针找到虚函数的地址然后调用。P->vp->input()

first one

base *P = &one;//将派生类引用或者指针转换成基类引用或者指针被成为向上强制转换,这个是允许的。

(这样就可以使用一个数组来表示多种类型的对象了    base *Arr[10])

反过来 

base one;

first *P = &one.://这是向下强制转换,如果不适用显示类型转换,则这种方式是不允许的。显示类型转换:first *P = (base *)&one       

基类的析构函数要定义城虚函数,否则当使用new/delete来为派生类的对象动态分配空间的时候,当对象被回收时,调用的就是基类的析构函数了,这显然会造成内存泄露的问题。

virtual void fun()=0   这个是纯虚函数

抽象类:至少有一个纯虚函数,而且派生类必须要实现纯虚函数。否则派生类就变成了抽象类了。

抽象类不能创建该类的对象。

 

posted on
2018-08-15 22:38 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/share-happy-everyday/p/9484496.html

你可能感兴趣的文章
(并查集)小希的迷宫 --HDU -- 1272
查看>>
浅谈php中使用websocket
查看>>
MongoDB下,启动服务
查看>>
sql 表连接
查看>>
上传插件(WebUploader)
查看>>
粒子效果 CCParticleSystem 编码的实现
查看>>
Objective-C中的一些特殊的数据类型
查看>>
https原理
查看>>
IOS学习笔记--IOS常用控件汇总
查看>>
设置h5页面不可复制文字
查看>>
自己写的日历控件 jquery
查看>>
黄聪:HtmlAgilityPack中SelectSingleNode的XPath和CSS选择器
查看>>
idea快捷键
查看>>
modelsim testbench测试DFF触发器verilog
查看>>
Windows最强ssh客户端推荐 —— Bitvise SSH Client
查看>>
《Programming in Lua 3》读书笔记(二)
查看>>
eclipse 中 Android sdk 无法更新的问题
查看>>
PrestaShop 网站后台配置(八)
查看>>
Android--CountDownTimer倒计时工具类
查看>>
linux关于bashrc与profile的区别(转)
查看>>