![](https://img-blog.csdnimg.cn/20210217143346850.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++教程
文章平均质量分 87
C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。学好C++不是一件容易的事,本专栏记录本人学习C++时的一些想法、心得,希望可以帮助到各位
快乐江湖
专注人工智能领域和优质计算机学习笔记创作
展开
-
第一章第一节:C++简介与学习方法
文章目录一:什么是C++二:C++发展史三:C++应用四:C++修炼"宝典"一:什么是C++谈到C++,我们一定会联想到C语言,的确C++与C语言有着密不可分的关系。编程语言分为两类——面向过程和面向对象,前者适合处理小规模的问题,但是一旦项目很大时,就显得捉襟见肘了。所以为了解决这样的问题,面向对象(OOP)对象的编程思想就应用而生了。1982年,Bjarne Stroustrup(C++之父)博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语 言。为了表达该语言与C语言的渊原创 2021-02-17 16:48:45 · 952 阅读 · 0 评论 -
第二章第一节:C++快速入门之命名空间
文章目录一:C++关键字二:命名空间(1)命名空间的作用(2)命名空间的定义A:命名空间的定义B:注意事项(3)命名空间的使用一:C++关键字为什么这里要提及关键字呢。因为任何语言的关键字都是很特殊的,它是独一无二的。C语言共计32个关键字,C++共计63个关键字。二:命名空间情景导入:一项工程,需要你和小王一起完成,你们两个在各自编写模块时都编写了一个相同名字的接口(函数),等到代码合并时,就出现了错误,原因可想而知,C/C++中,变量,函数以及类会作用域全局域中,相同的名字导致了命名冲突或名原创 2021-05-05 17:24:26 · 647 阅读 · 1 评论 -
第二章第二节:C++快速入门之输入和输出
文章目录(1)cout(2)cin输出Hello World是学习每个语言时的必备操作。最前面的那个C++输出似乎和C语言不太像,你当然可以使用printf输出,因为C++兼容C语言。但是在C++中,还是建议使用C++规定的输入和输出方式,它比C语言要更加方便,智能。(1)cout1.cout表示输出流,也就是控制台,所以你的Hello World可以写作2.很多时候,会在最后加上endl,它表示换行符,表示换行符流向控制台3.C++输出时非常方便,不像C语言一样,它不需要格式控制符注意原创 2021-05-05 17:25:25 · 799 阅读 · 0 评论 -
第二章第三节:C++快速入门之缺省参数
文章目录(1)缺省参数的概念(2)缺省参数的分类A:全缺省参数B:半缺省参数(3)注意事项情境导入有一个函数,作用是初始化数组的大小,由于不知道具体要申请多少空间,我们的常见操作是——初始化时先随便申请一定的空间,后序需要时进行增容。void ArrayInit(int* a){ a=(int*)malloc(sizeof(int)*8);//由于不知道具体存储多少个,暂时定为8个}int main(){ int* a=NULL; ArrayInit(a);}所以这样的做法有点“原创 2021-05-05 17:26:25 · 459 阅读 · 0 评论 -
第二章第四节:C++快速入门之函数重载
文章目录(1)函数重载的概念(2)名字修饰A:C/C++编译运行过程B:C/C++找寻函数时的区别(3)总结C++函数重载简单点说就是函数重名问题。还记得我们在学习C语言时必然会做的一个练习——写一个计算器,其中,加减乘除需要使用到不同的函数(当然可以使用回调函数解决),函数名不能相同,但是在C++中就不一样了。(1)函数重载的概念C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数形参列表必须不同(个数不同或类型不同或顺序不同),它常用于处理功能类似,但数据类型不同的问题。int Ad原创 2021-05-05 17:28:01 · 517 阅读 · 0 评论 -
第二章第五节:C++快速入门之引用,引用和指针的区别
文章目录(1)引用的概念(2)引用的特点(3)常引用(4)引用的应用场景A:做参数B:做返回值(5)引用和指针在第一次学习C语言指针时,许多教材上都会给出一个交换变量值的函数的例子,开始我们认为这样交换就可以成功void swap(int a,int b){ int temp=a; a=b; b=temp;}int main(){ int a=1; int b=2; swap(a,b);}但学习完指针后,就明白了这样的操作是不行的,因为每当调用函数时就会为该函数的形参开辟一个原创 2021-05-09 13:58:34 · 1022 阅读 · 3 评论 -
第二章第六节:C++快速入门之内联函数,auto关键字,C++11基于范围的for循环和nullptr
文章目录一:建立C++工程文件二:C++关键字三:命名空间(1)命名空间的作用(2)命名空间的定义A:命名空间的定义B:注意事项(3)命名空间的使用四:C++的输入和输出(1)cout(2)cin五:缺省参数(1)缺省参数的概念(2)缺省参数的分类A:全缺省参数B:半缺省参数(3)注意事项六:函数重载(1)函数重载的概念C++虽然是基于C语言开发的,但是经过版本的不断更迭,有些语法,操作和C语言还是有缺别的。所以这也是很多人在学完C语言后,看到C++,总感觉两者没有关联,甚至觉得是两种不同的语言。读者在看原创 2021-02-17 23:20:02 · 890 阅读 · 3 评论 -
第三章第一节1:类的引入和类的定义以及访问限定符和封装还有对面向对象的理解
文章目录一:面向对象与面向过程二:类的引入三:类的定义(1)C++类的定义(2)类的两种定义方式A:声明和定义全部放在类体中B:定义和声明分开放四:类的访问限定符及封装(1)访问限定符(2)封装五:类的实例化(1)类的实例化(2)面向对象一:面向对象与面向过程见下文二:类的引入学习C语言时,我们知道,结构体的作用是把一些具有不同类型的变量组合一起struct Student{ char _name[20]; char _gender[3]; int _age;}而在C++中,其结构体原创 2021-05-12 09:19:28 · 644 阅读 · 1 评论 -
第三章第一节2:类的对象模型、计算类的大小以及this指针问题
文章目录一:面向对象与面向过程二:类的引入三:类的定义(1)C++类的定义(2)类的两种定义方式A:声明和定义全部放在类体中B:定义和声明分开放四:类的访问限定符及封装(1)访问限定符(2)封装一:面向对象与面向过程二:类的引入学习C语言时,我们知道,结构体的作用是把一些具有不同类型的变量组合一起struct Student{ char _name[20]; char _gender[3]; int _age;}而在C++中,其结构体内不止可以定义变量,而且还可以定义函数、struc原创 2021-02-20 00:42:16 · 1509 阅读 · 4 评论 -
第三章第二节1:类的默认成员函数之构造函数和析构函数
文章目录一:类的默认6个成员函数二:构造函数(1)构造函数的概念(2)构造函数注意事项三:析构函数(1)析构函数的概念(2)析构函数注意事项一:类的默认6个成员函数前面说过,如果一个类里面什么都没有,那么称这样的类为空类。但其实“空类不空”,任何一个类,在我们不写的情况下,都一定会有6个默认成员函数默认成员函数是这样工作的:如果我们不写,编译器就帮我们写,我们要是写了就用我们写的。如果编译器和我们的都写了,同时编译器写的有问题,也得用我们的。二:构造函数情景导入:如下有一个日期类:class原创 2021-06-06 22:07:36 · 625 阅读 · 0 评论 -
第三章第二节2:类的默认成员函数之拷贝构造函数
如果使用传值的方式传参,将会引发。以如下日期类为例,实例化一个对象。拷贝构造函数的参数只有一个,且。拷贝构造函数=拷贝+构造函数。拷贝构造函数是构造函数的一个。拷贝构造函数的作用类似于。后,如果还想实例化一个与。对本类对象的一个引用。则利用了拷贝构造函数。原创 2021-02-20 23:49:18 · 912 阅读 · 0 评论 -
第三章第二节3:类的默认成员函数之运算符重载
文章目录一:运算符重载(1)运算符重载A:为什么要有运算符重载?B:如何进行运算符重载(2)赋值运算符重载二:const修饰类的成员函数一:运算符重载(1)运算符重载A:为什么要有运算符重载?如下,我们定义一个整形变量i,对他进行一些运算符操作,比如加减乘除,这一点是大家很熟悉的,并且编译也直到该怎么做。int main(){ int i=1; i+1;//编译器知道这样做的意义 i*2;//编译器知道这样做的意义}但是,对于自定义类型就不是这样了。比如用前面的日期类,去实例化一个对原创 2021-06-06 22:07:54 · 770 阅读 · 0 评论 -
第三章第三节:初始化列表、匿名对象和explicit关键字
文章目录(1)真的是初始化吗(2)初始化列表A:概述B:哪些成员必须在初始化列表进行初始化(3)小结(4)匿名对象(5)explicit关键字(1)真的是初始化吗上一篇在说构造函数的时候,我们把构造函数的作用称之为在对象被实例化的同时初始化,也就是下面这样class Date{public: Date(int year=1998,int month=12,int day=20) { _year=year; _month=month; _day=day; }private:原创 2021-06-06 22:13:41 · 433 阅读 · 1 评论 -
第三章第四节:类的静态成员变量和静态成员函数
文章目录(1)一个问题经典的面试题(2)static成员(3)总结(1)一个问题经典的面试题有一个经典的面试题:需要你实现一个类,以此计算出在这个工程中这个类一共实例化出了多少对象我们知道,实例化对象时一定会调用构造函数或拷贝构造,所以你的想法可能是这样:定义一个计数器,然后在构造和拷贝构造中分别进行计数,如下class A{public: A()//构造函数 { ++_cout; } A(const A& t)//拷贝构造 { ++_cout: } priva原创 2021-06-06 22:15:31 · 326 阅读 · 0 评论 -
第三章第五节:类之友元函数、友元类和内部类
文章目录一:二看构造函数(1)真的是初始化吗(2)初始化列表A:概述B:哪些成员必须在初始化列表进行初始化一:二看构造函数(1)真的是初始化吗上一篇在说构造函数的时候,我们把构造函数的作用称之为在对象被实例化的同时初始化,也就是下面这样class Date{public: Date(int year=1998,int month=12,int day=20) { _year=year; _month=month; _day=day; }private: int _year原创 2021-03-05 19:15:45 · 458 阅读 · 1 评论 -
第三章第六节:日期类实现
文章目录一:前言二:准备(1)实现文件(2)基本布局三:具体实现(1)默认成员函数实现A:全缺省构造函数B:拷贝构造C:析构函数(2)赋值运算符重载A:日期+=天数B:日期+天数C:日期-=天数D:日期-天数E:前置++和后置++F:前置--和后置--(3)运算符重载A:==重载和!=重载B:>重载和其他重载(4)日期相减一:前言C++类和对象里面的默认成员函数,如构造函数,拷贝构造赋值重载这些问题虽然说是不难,但是想要写出一个标准的类还是具有一定挑战性的。而编写日期类是一个很好的练手项目主要可原创 2021-02-23 16:50:15 · 581 阅读 · 1 评论 -
第四章:C/C++内存管理
针对自定义类型new和delete在自定义类型中才能发挥出它真正的作用。因为new和delete不止负责开辟和释放空间,而且还负责调用构造和析构函数,具体来说new的原理调用函数申请空间在申请的空间上执行构造函数,完成对象的构造delete的原理在空间上执行析构函数,完成对象的资源清理工作调用函数释放对象空间的原理调用函数,在中实际调用函数完成N个对象的空间的申请在申请的空间上执行N次构造函数delete[]的原理在需要释放的对象空间上执行N次析构函数,完成N个对象的资源的清理调用。原创 2021-03-11 10:28:29 · 426 阅读 · 2 评论 -
第五章:C++泛型编程和模板
文章目录一:泛型编程二:函数模板(1)使用模板解决上述问题(2)函数模板原理(3)函数模板的实例化A:隐式实例化B:显示实例化一:泛型编程有一个函数不管在哪种场景下都会经常使用到,那就是交换函数。但是由于一个交换的变量类型不确定,所以往往就是遇到一种变量写一种交换函数,于是你可能会写出这么多交换函数void Swap(int& a,int& b){ int temp=left; left=right; right=temp;}void Swap(double& a,原创 2021-03-12 20:02:41 · 495 阅读 · 0 评论 -
第六章第一节:C++之STL简介
标准模板库STL(Standard Template Library):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。原创 2021-03-19 12:52:43 · 504 阅读 · 0 评论 -
第六章第二节1:C++STL之string基本使用
文章目录一:几个问题二:学习string的常用接口(1)string类对象的构造(2)容量操作(3)访问操作(4)迭代器(5)修改操作(6)非成员函数一:几个问题1:为什么学习string类在C语言中,面对string我们有专门处理字符串的头文件<string.h>,但是这样的方式有一些很大的缺点:首先是不符合面向对象的思想,字符串和函数是分离的(也就是成员变量和成员函数是分离的),还有就是一些功能不全,实现一些常见功能时还要自己写,而且由于C/C++字符串是以’\0’结尾的,所以处理不好原创 2021-06-06 22:23:44 · 439 阅读 · 0 评论 -
6-2-2:STL之string——string的模拟实现
文章目录一:几个问题二:学习string的常用接口(1)string类对象的构造(2)容量操作(3)访问操作(4)迭代器一:几个问题1:为什么学习string类在C语言中,面对string我们有专门处理字符串的头文件<string.h>,但是这样的方式有一些很大的缺点:首先是不符合面向对象的思想,字符串和函数是分离的(也就是成员变量和成员函数是分离的),还有就是一些功能不全,实现一些常见功能时还要自己写,而且由于C/C++字符串是以’\0’结尾的,所以处理不好极易造成越界问题2:stri原创 2021-03-19 16:36:56 · 337 阅读 · 0 评论 -
第六章第三节1:C++STL之vector基本使用
vector:和数组一样,vector也采用连续的空间来存储元素,这意味着vector可以用下标对元素访问。与普通数组不同之处在于,其大小是动态可变的其定义如下,可以发现vector是一个模板注意:第二个模板参数表示内存池,是一种池化技术,是为了避免反复向操作系统申请空间,此阶段学习时可以忽略它官方文档中给出了vector的各种操作,和string非常相似vector作为类模板可以承载很多数据类型。原创 2021-06-07 21:58:55 · 602 阅读 · 0 评论 -
6-3-2:STL之vector——vector的模拟实现
文章目录一:vector介绍二:vector的常用接口(1)构造(2)迭代器(3)容量操作(4)元素访问(5)增删查改一:vector介绍vector是一个可变大小数组的序列容器。和数组一样,vector也采用连续的空间来存储元素,也就是可以用下标对vector的元素进行访问,但是它又和数组不一样,因为它的大小可以动态可变,十分高效可以发现它也是模板,需要注意的是它的第二个模板参数是一个内存池,是一种池化技术,主要是避免反复向操作系统申请空间,我们学习时这个参数可以不用管,因为它有默认参数vect原创 2021-04-04 12:01:06 · 476 阅读 · 1 评论 -
第六章第四节1:C++STL之list基本使用
文章目录一:list介绍二:list常用接口(1)构造(2)迭代器(3)增删查改一:list介绍list是可以在常数范围呢任意位置进行插入和删除的序列式容器,并且该容器可以进行前后双向迭代,其实它的底层就是咋们在数据结构讲到过的带头结点的双向循环链表list作为STL容器之一,其接口和string相似所以就不做过多的细致介绍了,详见STL之string需要注意list作为类模板,可以承载很多数据类型二:list常用接口(1)构造可以发下list的构造函数和vector基本相似,所以这里不原创 2021-06-07 22:01:27 · 406 阅读 · 0 评论 -
6-4-2:STL之list——list的模拟实现
文章目录一:list介绍二:list常用接口(1)构造(2)迭代器(3)增删查改一:list介绍list是可以在常数范围呢任意位置进行插入和删除的序列式容器,并且该容器可以进行前后双向迭代,其实它的底层就是咋们在数据结构讲到过的带头结点的双向循环链表list作为STL容器之一,其接口和string相似所以就不做过多的细致介绍了,详见STL之string需要注意list作为类模板,可以承载很多数据类型二:list常用接口(1)构造可以发下list的构造函数和vector基本相似,所以这里不原创 2021-04-09 17:20:48 · 234 阅读 · 0 评论 -
第六章第五节1:C++STL之stack和queue基本使用
文章目录一:简单介绍(1)stack(2)queue二:stack和queue的应用三:stack和queue的模拟实现——适配器一:简单介绍stack和queue是STL中的两个容器,分别对应数据结构中的栈和队列,在这里关于它的具体接口的使用就不做过多介绍了,逻辑上完全和数据结构一致,接口方面和之前我们学习过的vector,list都十分相似数据结构之栈和队列(1)stack(2)queue二:stack和queue的应用LeetCode有关栈的题目stack经典题LeetC原创 2021-06-07 22:04:58 · 466 阅读 · 0 评论 -
6-5-2:STL之stack和queue——双端队列deque
文章目录双端队列-deque双端队列-dequedeque是一种双向开口的连续线性空间。所谓双向开口,意思就是可以在头尾两端分别进行元素的插入和删除操作deque的出现是为了解决融合vector和list,以达到取长补短的目的(它想要解决vector插入删除元素效率慢以及list不能随机访问的缺点),但是就目前看,它的确失败了。deque的实现相当复杂,尤其它的迭代器,可谓是设计的精华,所以我们的主要目的就是去了解一下它的底层,同时明白为什么deque不能替代vector和list,而适合作为原创 2021-06-07 22:07:18 · 301 阅读 · 0 评论 -
第六章第六节:C++STL之priority_queue(优先级队列)和仿函数
文章目录一:简单介绍(1)stack(2)list二:stack和一:简单介绍stack和queue是STL中的两个容器,分别对应数据结构中的栈和队列,在这里关于它的具体接口的使用就不做过多介绍了,逻辑上完全和数据结构一致,接口方面和之前我们学习过的vector,list都十分相似数据结构之栈和队列(1)stack(2)list二:stack和...原创 2021-04-16 20:32:38 · 391 阅读 · 0 评论 -
第六章第七节1:C++STL之set和map的基本使用
文章目录一:前言(1)序列式容器和关联式容器(2)树形结构的关联式容器二:set(1)基本介绍(2)注意(3)set的使用A:set的模板参数列表B:set的常用接口C:set的使用举例一:前言(1)序列式容器和关联式容器序列式容器:前面的vector,list等均为序列式容器,特点就是其底层结构为线性结构关联式容器:与序列式容器不同,关联式容器内存储的是键值对,也即<key,value>结构,这样就一维这关联式容器检索数据的效率要远远高于序列式容器(2)树形结构的关联式容器ST原创 2021-07-09 23:41:05 · 387 阅读 · 1 评论 -
第七章:C++的IO流和stringstream
文章目录一:C语言的输入和输出及C++ IO流(1)什么是流(2)C++ I/O流A:C++标准IO流B:C++文件IO流二:stringstream(1)基本介绍(2)引用A:数据类型转换B:字符串的拼接一:C语言的输入和输出及C++ IO流在C语言中,我们经常用到的输入和输出的函数共有三组输入/输出操作对象printf/scanf控制台fprintf/fscanf文件sprintf/sscanf字符数组(缓冲区)而C++中对应的操作如下输入/输原创 2021-04-24 16:12:25 · 890 阅读 · 3 评论 -
第八章第一节:C++继承之继承概述和继承语法
文章目录一:对继承的理解二:继承的定义(1)定义格式(2)继承方式和访问限定符一:对继承的理解面向对象三大特性:封装,继承和多态。其中封装是指将数据和方法整合在一起,并加以作用域限制符进行限定,以达到更好的管理数据的目的,那么继承又应该如何理解呢在实现一个教务系统时,对于人员大部分都会分为学生,教师这两种,那也就意味着要创建两个个对应的类,学生会有自己的姓名,年龄和学号以及以及拥有查看教务系统和做作业的行为,教师也会有自己的姓名,年龄和工号以及拥有查看教务系统和布置作业的行为。但是很明显的一点是:这两原创 2021-05-05 13:20:52 · 418 阅读 · 2 评论 -
第八章第二节:C++继承之父类和子类对象赋值转换(切片)探究
父类和子类对象赋值转换(切片):是指子类对象赋值给父类对象(父类的指针或引用也可以),但父类对象不能赋值给子类对象。这类似于Java中的向上转型通俗理解Student一定是Person,但Person不一定是Student我们把这种操作也称之为切片,因为子类对象赋值给父类对象时只赋值了一部分如下,父类中的_name是公有,方便子类继承后修改,然后分别创建父类和子类对象,然后将子类对象赋值给父类public :cout原创 2021-05-05 13:22:57 · 967 阅读 · 2 评论 -
第八章第三节:C++继承之作用域,隐藏,重定义和静态成员
文章目录(1):继承中的作用域(2):友元关系不能被继承(3):静态成员和继承(1):继承中的作用域在学习作用域时,我们说过代码中可以定义在不同作用域中的同名变量,并且输出时会遵循就近原则。同样,在继承体系中父类和子类也拥有各自独立的作用域,这意味着他们之间可以定义同名的成员如下,父类和子类都具有成员num,父类的num=123,子类的num999#include <iostream>#include <string>using namespace std;cla原创 2021-05-05 13:25:55 · 414 阅读 · 1 评论 -
8-4:C++继承之子类的默认构造函数如何使用
子类的默认成员函数………前面我们说过,类共有6个默认成员函数,如果不写那么编译器就会我们自动生成那么对于子类呢?子类继承了父类,它该如何处理默认成员函数我们创建下面的父类Person和子类Student讲解class Person{public: Person(const char* name = "peter") :_name(name) { cout << "构造" << endl; } Person(const Person& p) :_n原创 2021-05-05 13:27:18 · 527 阅读 · 1 评论 -
8-5:C++继承之多继承,菱形继承,虚继承,虚基表,继承和组合
文章目录一:对继承的理解二:继承的定义(1)定义格式(2)继承方式和访问限定符三:父类和子类对象赋值转换一:对继承的理解面向对象三大特性:封装,继承和多态。其中封装是指将数据和方法整合在一起,并加以作用域限制符进行限定,以达到更好的管理数据的目的,那么继承又应该如何理解呢在实现一个教务系统时,对于人员大部分都会分为学生,教师这两种,那也就意味着要创建两个个对应的类,学生会有自己的姓名,年龄和学号以及以及拥有查看教务系统和做作业的行为,教师也会有自己的姓名,年龄和工号以及拥有查看教务系统和布置作业的行为原创 2021-05-05 13:29:49 · 439 阅读 · 1 评论 -
9-1:C++多态之对多态的理解和多态的实现条件以及虚函数还有重载重写冲定义的区别
文章目录(1)对于多态的理解(2)多态的实现A:实现条件B:虚函数的重写C:虚函数的重写两个例外(3)override和finalA:finalB:override(4)重载,重写(覆盖)和重定义(隐藏)的区别(1)对于多态的理解所谓多态,就是指完成某个行为时,不同对象有有不同的完成方法比如经典的买票行为,学生和普通人都属于人,但是学生买票可以半价,而普通人则只能全票(2)多态的实现A:实现条件用下面的代码为例讲解如何实现多态#include <iostream>using n原创 2021-05-11 22:07:20 · 359 阅读 · 1 评论 -
9-2:C++多态之纯虚函数和抽象类以及接口继承和实现继承
文章目录(1)纯虚函数和抽象类的概念(2)抽象类的意义(3)接口继承与实现继承(1)纯虚函数和抽象类的概念如果一个类的虚函数后面写上=0,同时不写它的实现,那么这样的虚函数称之为纯虚函数,包含纯虚函数的类则称之为抽象类(2)抽象类的意义如下代码中有一个,Animal类,还有一个Dog类和Tiger类,他们内部都有三个构成重写的函数fun,用于打印一句话,这句话描述了他们各自的特点。但是我们发现了,对于小狗和老虎这种具体的动物可以很容易用一些关键词描述出它们给我们的具体影响,但是对于动物这种宽泛的东原创 2021-05-11 22:09:20 · 601 阅读 · 5 评论 -
9-3:C++多态之多态的实现原理之虚函数表,虚函数表指针静态绑定和动态绑定
文章目录(1)虚函数表(2)多态原理(3)静态多态与动态多态A:静态多态B:动态多态(1)虚函数表如下代码,计算此带有虚函数的类的大小#include <iostream>using namespace std;class Test{public: virtual void fun1() { cout << "fun(1)" << endl; } virtual void fun2() { cout << "fun(2)" &原创 2021-05-11 22:11:36 · 557 阅读 · 5 评论 -
9-4:C++多态之单继承和多继承中的虚函数表
文章目录(1)单继承中的虚函数表(2)多继承中的虚函数表(1)单继承中的虚函数表如下继承体系中,fun1函数重写,fun2未被重写,B类中fun3和fun4也被定义为了虚函数#include <iostream>#include <stdio.h>using namespace std;class A{public: virtual void fun1() { cout << "fun(1)" << endl; } virtual原创 2021-05-11 22:13:53 · 388 阅读 · 0 评论 -
9-5:C++多态之多态和继承的经典题目以及面试中常考内容
文章目录一:多态的理解及实现(1)对于多态的理解(2)多态的实现A:实现条件B:虚函数的重写C:虚函数的重写两个例外一:多态的理解及实现(1)对于多态的理解所谓多态,就是指完成某个行为时,不同对象有有不同的完成方法比如经典的买票行为,学生和普通人都属于人,但是学生买票可以半价,而普通人则只能全票(2)多态的实现A:实现条件用下面的代码为例讲解如何实现多态#include <iostream>using namespace std;class Person{publi原创 2021-05-11 22:26:29 · 601 阅读 · 2 评论