虚析构函数的作用(1.基类为什么需要虚析构函数)

2024-07-11 23:51:12 21

虚析构函数的作用(1.基类为什么需要虚析构函数)

本文目录

1.基类为什么需要虚析构函数

基类虚析构,是为了在多态中,能正确调用到对应的析构函数。例如:class A{ public:virtual ~A();}class B: public A{public:~B();}具体实现略去,只看继承关系,那么当我有如下代码:A* p = new B();delete p;此时如果不是虚析构函数,则只会调用到A的析构函数,而不会调用B的析构函数,这样会产生一系列的问题。只有虚析构函数,才能确保调用到正确的函数(B的析构)。

C++中虚函数的作用是什么定义是什么简要说明下,并举一个简单的例子

  1. 作用:虚函数的作用就是将接口(函数调用)与实现(函数定义)分开, 就是实现所谓的多态行为。也就是说虚函数提供了让你修改基类函数定义的机会。这里虽然你定义了一个派生类但是这个派生类任然可以按照基类的方式使用,即将派生类对象传递给需要基类引用、指针的函数。

  2. 定义: 在一个类中,一个由virtual 关键字修饰的函数声明表示这个函数声明所对应的函数调用既要服务于本类中的函数定义也要服务于派生类中的函数定义,相当于一个接口的作用。

  3. 一段良好的代码通常只使用基类提供的接口来编写,那些与派生类相关的代码单独放在一个地方(工厂)。

  4. 例子:

        

        

class Window {        public:            virtual void drawEvent(void *event);   /            virtual void keyEvent(void *event);            virtual void mouseEvent(void *event);            virtual void addWindow(Window *window);            void show();            virtual ~Window();   // 用到继承, 基类的析构函数必须声明为虚函数,否则是逻辑错误            ...        };                class Button : public Window {        public:            // 以下声明表示重新定义基类的虚函数的函数体,改变基类相应函数的行为            void drawEvent(void *event);            void keyEvent(void *event);            void mouseEvent(void *event);            void setText(const std::string label);            ....        };                class Menu;        class MenuBar : public Window {        public:        // 以下声明表示重新定义基类的虚函数的函数体,改变基类相应函数的行为            void drawEvent(void *event);            void mouseEvent(void *event);            void addWindow(Window *m);            ...        };            class Menu : public Window {    public:    // 以下声明表示重新定义基类的虚函数的函数体,改变基类相应函数的行为        void drawEvent(void *event);        void mouseEvent(void *event);        void keyEvent(void *event);    };        void userCode(Window &win, Window &win2) {        win.addWindow(win2); //用户代码只用到了基类的引用    }    int main() {        Window mainWindow(...);        MenuBar menuar(...);        Menu fileMenu(...);        Button button(...);        usrCode(mainWindow, menuBar); //将MenuBar对象当做Window引用来使用,由于定义了虚函数,所以usrCode会使用我们重定义的代码        usrCode(menuBar, fileMenu);   //...        usrCode(mainWindow, button);  //...        mainWindow.show();}

析构函数和虚函数的用法及作用!

析构函数是用来释放所定义的对象中使用的指针,默认的析构函数不用显示调用,自建的析构函数要在程序末尾调用。虚函数可以让成员函数操作一般化,用基类的指针指向不同的派生类的对象时,基类指针调用其虚成员函数,则会调用其真正指向对象的成员函数,而不是基类中定义的成员函数(只要派生类改写了该成员函数)。若不是虚函数,则不管基类指针指向的哪个派生类对象,调用时都会调用基类中定义的那个函数。

请讲一讲析构函数和虚函数的用法和作用

【答案】:析构就是对象离开生存空间时执行的,用来清理分配的空间之类.虚函数的作用:假如有类A.类A派生出类B.那么如果写A* p = new B;时.就得到了一个指向类B的指针,这个指针的类型是A*如果类A和类B中都有void Out()这么个函数.p-》Out()将调用A::Out()函数而如果把类A中的改成虚函数virtual void Out().p-》Out()就将调用B::Out()函数

虚析构函数的作用(1.基类为什么需要虚析构函数)

本文编辑:admin

更多文章:


excel中index函数的用法(Excel中INDEX函数怎么使用)

excel中index函数的用法(Excel中INDEX函数怎么使用)

本文目录Excel中INDEX函数怎么使用excel里的index和match函数怎么使用excel中index()函数什么意思有何用途EXCEL工作簿中多个工作表如何应用函数INDEXexcel index函数Excel中INDEX函数怎

2024年6月24日 10:25

router是什么意思(vue的$route和$router有什么区别和关系呢)

router是什么意思(vue的$route和$router有什么区别和关系呢)

本文目录vue的$route和$router有什么区别和关系呢router什么意思vue的$route和$router有什么区别和关系呢1.router是VueRouter的一个对象,通过Vue.use(VueRouter)和VueRout

2024年6月27日 17:14

jdbc的作用(在java中JDBC的主要作用是什么和他的组成有哪些)

jdbc的作用(在java中JDBC的主要作用是什么和他的组成有哪些)

本文目录在java中JDBC的主要作用是什么和他的组成有哪些jmeter中jdbc的作用在java中JDBC的主要作用是什么和他的组成有哪些JDBC是由一系列连接(Connection)、SQL语句(Statement)和结果集(Resul

2024年7月4日 06:29

android系统签名怎么查看(Android怎样获取应用的签名信息)

android系统签名怎么查看(Android怎样获取应用的签名信息)

本文目录Android怎样获取应用的签名信息怎么查看android app的签名android中怎么看应用签名怎样查看android的apk文件的签名如何查看系统签名 android如何查看 android 数字签名Android怎样获取应

2024年5月26日 13:05

rank函数用于计算什么(RANK函数是作什么用的)

rank函数用于计算什么(RANK函数是作什么用的)

大家好,如果您还对rank函数用于计算什么不太了解,没有关系,今天就由本站为大家分享rank函数用于计算什么的知识,包括RANK函数是作什么用的的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录RANK函数是作什么用

2024年9月9日 23:20

个人主页 百度(百度个人主页是什么怎么进自己的)

个人主页 百度(百度个人主页是什么怎么进自己的)

本文目录百度个人主页是什么怎么进自己的如何能在百度里搜寻到自己的个人主页百度个人首页在哪百度个人主页是什么怎么进自己的知友您好?供您参考:百度知道是百度官方为网友提供的用于交流、学习的平台。也可理解为学校,个人主页是在校学生的成绩,记载着知

2024年6月20日 19:31

perl里面的uc(perl 中如何实现字符串大小写转换)

perl里面的uc(perl 中如何实现字符串大小写转换)

本文目录perl 中如何实现字符串大小写转换perl的排序Perl里面有lc这个关键字么perl 中如何实现字符串大小写转换lc, uc分别是小写和大写函数大小写字母转换:函数 uc (uppercase) 将所有的小写字母转成大写;函数

2024年7月22日 23:33

script hook rdr2(请问谁知道哪里有远程控制软件VNC的源码)

script hook rdr2(请问谁知道哪里有远程控制软件VNC的源码)

本文目录请问谁知道哪里有远程控制软件VNC的源码荒野大镖客2脚本挂钩错误荒野大镖客2mod大峡山小屋怎么安装请问谁知道哪里有远程控制软件VNC的源码vnc的源码安装与使用!!!VNC的原码安装与使用下载VNC Server与VNC view

2024年7月16日 06:04

css导航条随着页面移动(如何调整CSS导航栏的位置)

css导航条随着页面移动(如何调整CSS导航栏的位置)

本文目录如何调整CSS导航栏的位置如何实现制作的网页左侧能有一个跟着网页移动的导航栏,就像那种广告一样鼠标移到一个导航的按钮上,导航下边的内容就随之发生改变,用css怎么做呢如何设置左侧导航网页中部跟随滚动条浮动网页导航条宽度随着浏览器窗口

2024年6月16日 17:05

前端自学视频教程(正在自学前端,谁有前端视频教程啊)

前端自学视频教程(正在自学前端,谁有前端视频教程啊)

本文目录正在自学前端,谁有前端视频教程啊自学前端有哪些比较好的课程推荐国内学习前端最好的视频网站是那个求教:学习web前端开发应该学习的比较好的视频,请高手推荐一正在自学前端,谁有前端视频教程啊前端的前景很好,所以学习前端的人也很多,自学是

2024年6月5日 06:49

正则匹配两个汉字(正则表达式在一段文本中匹配到包含的两个汉字的某一行)

正则匹配两个汉字(正则表达式在一段文本中匹配到包含的两个汉字的某一行)

其实正则匹配两个汉字的问题并不复杂,但是又很多的朋友都不太了解正则表达式在一段文本中匹配到包含的两个汉字的某一行,因此呢,今天小编就来为大家分享正则匹配两个汉字的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录正则

2024年7月7日 18:50

alex是什么意思(Alex这个英文名是什么意思)

alex是什么意思(Alex这个英文名是什么意思)

本文目录Alex这个英文名是什么意思Alex什么意思Alex 什么意思,怎么读英语Alex是什么意思alex什么意思ALEX什么意思alex是什么意思alex中文是什么意思啊alex是啥意思Alex这个英文名是什么意思Alex 英 /’æl

2024年7月3日 16:06

青少年语言培训班(十大少儿英语培训机构排名有哪些)

青少年语言培训班(十大少儿英语培训机构排名有哪些)

本文目录十大少儿英语培训机构排名有哪些口才培训班主要学什么深圳英语培训机构前十名宜春口才课培训班排名前十有哪些青少年英语培训班课程怎样收费青少年英语培训班课程收费高吗效果怎样青少年口才培训班怎么选择小海豚口才教育教的好还是青少年宫教的好很多

2024年7月3日 08:03

php判断数据库是否连接成功(php pdo连接mysql如何判断数据库是否连接成功)

php判断数据库是否连接成功(php pdo连接mysql如何判断数据库是否连接成功)

本文目录php pdo连接mysql如何判断数据库是否连接成功php判断数据库是不是连接成功的测试例子php sql怎么判断有没有插入数据库成功php测试mysql数据库链接是否成功,但页面显示一片空白,高手帮帮忙PHP 判断数据库连接PH

2024年7月8日 13:31

cluster的同义词(有人能不能告诉我 crowd , cluster和throng 这三个单词的区别啊)

cluster的同义词(有人能不能告诉我 crowd , cluster和throng 这三个单词的区别啊)

大家好,关于cluster的同义词很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于有人能不能告诉我 crowd , cluster和throng 这三个单词的区别啊的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以

2024年7月29日 15:10

哪个前端框架最简单(目前流行的前端框架有哪些)

哪个前端框架最简单(目前流行的前端框架有哪些)

本文目录目前流行的前端框架有哪些后台管理系统,前端用什么框架开发比较好好用的前端ui框架前端开发框架有哪些目前常用的一些前端的框架有哪些轻量级的前端框架web前端开源框架哪个好用后台管理系统,前端框架用什么最好_前端框架有哪些目前流行的前端

2024年2月23日 18:00

php学校新闻管理系统代码(用php制作新闻页面的后台管理系统怎么设计.急用!!!)

php学校新闻管理系统代码(用php制作新闻页面的后台管理系统怎么设计.急用!!!)

各位老铁们好,相信很多人对php学校新闻管理系统代码都不是特别的了解,因此呢,今天就来为大家分享下关于php学校新闻管理系统代码以及用php制作新闻页面的后台管理系统怎么设计.急用!!!的问题知识,还望可以帮助大家,解决大家的一些困惑,下面

2024年8月23日 16:50

直方图和直条图怎么画(条形统计图怎么画)

直方图和直条图怎么画(条形统计图怎么画)

本文目录条形统计图怎么画画直方图的步骤是什么七年级美术统计图怎么画如何用Excel画直方图条形图怎么画画条形统计图的步骤条形统计图怎么画方法如下:工具:Excel2010,联想P50s系统:Windows 101、打开Excel软件,如图所

2024年6月26日 03:50

jquery修改css属性值(jquery修改css问题)

jquery修改css属性值(jquery修改css问题)

各位老铁们好,相信很多人对jquery修改css属性值都不是特别的了解,因此呢,今天就来为大家分享下关于jquery修改css属性值以及jquery修改css问题的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录j

2024年7月30日 08:50

英语单词thy可以怎么用?Java和pathy哪个好

英语单词thy可以怎么用?Java和pathy哪个好

本文目录英语单词thy可以怎么用Java和pathy哪个好spring boot+thymeleaf用什么实现图表比较好thy是什么意思英语Thy翻译成汝的还是你的那个更保持原本的味道英语单词thy可以怎么用比较古代英文的了,比如说莎士比亚

2024年5月15日 19:28

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1154
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1151
标签列表

热门搜索