文章目录 一、"多态"实现条件 1、"多态"实现需要满足的三个条件 2、"多态"的应用场景 3、"多态"的思想 二、"多态"代码示例 一、"多态"实现条件 1、"多态"实现需要满足的三个条件 "多态"实现需要满足以下三个条件: 首先,要有继承关系; 然后,父类中的函数需要有virtual关键字修饰,子类重写该"虚函数"; 最后,父类指针或父类引用指向子类的对象; 满足①继承,②虚函数重写,③父类指针/引用指向子类对象三个条件,即可实现多态; 在C语言中,指针存在的最大意义就是"间接赋值"; "间接赋值"成立的三大条件: 首先,需要有两个变量,一...

文章目录 一、不建议将所有函数都声明为virtual虚函数 二、多态的理解层次 三、父类指针和子类指针步长 对象可以直接获取到自身封装的普通函数,如果要访问虚函数,需要增加一次寻址操作,因此这里建议不需要将有多态需求的函数声明为虚函数; C中指向某类型对象的指针的运算,是根据指针类型进行的,指针自增,指针的地址值会增加指针类型字节大小; 指针的步长是根据指针指向的内存空间的数据类型确定的; 子类继承父类,如果子类没有添加任何成员函数与成员方法,那么子类指针与父类指针的步长是相同的; 一、不建议将所有函数都声明为virtual虚函数 C类中,每个成员函数都可以声明为v...

文章目录 一、多态原理 1、多态成立的三个条件 2、虚函数表概念 3、虚函数表工作机制 4、vptr指针 5、虚函数表运行时机制 6、虚函数与动态联编 二、代码示例虚函数表 1、代码实例分析虚函数表创建与使用 2、完整代码示例 一、多态原理 1、多态成立的三个条件 "多态"实现需要满足以下三个条件: 首先,要有继承关系; 然后,父类中的函数需要有virtual关键字修饰,子类重写该"虚函数"; 最后,父类指针或父类引用指向子类的对象; 满足①继承,②虚函数重写,③父类指针/引用指向子类对象三个条件,即可实现多态; 2、虚函数表概念 "多态...

文章目录 一、函数重定义涉及的问题 1、执行出错的代码 2、代码分析 3、错误原因分析函数重定义问题:子类覆盖父类函数名 4、正确调用函数的方法 一、函数重定义涉及的问题 1、执行出错的代码 错误代码示例: include"iostream" usingnamespacestd; //父类 classParent{ public: voidfun(inta,intb,intc) { cout<<"执行父类voidfun(inta,intb,intc)函数"<<endl; } voidfun(inta,intb) { ...

文章目录 一、STL容器简介 1、STL容器区别 2、STL容器分类 3、常用的STL容器 一、STL容器简介 1、STL容器区别 STL容器用于管理一组数据元素,不同类型的STL容器的区别主要是节点和节点之间的关系模型不同; 容器的内存空间是否连续:向量vector的内存空间是连续的,列表List的内存空间是不连续的; 容器中的元素节点关系:顺序排列,单向链表,双向链表,树形关系; 容器中的元素是否允许重复:集合Set中的元素不允许重复; 容器中的元素插入限制:是否允许插入到中间,插入到首部,插入到尾部; 容器中的元素移除限制:是否允许移除中间元素,移除首...

文章目录 一、多继承"弊端" 1、多继承被禁用的场景 2、多继承弊端 二、代码示例多继承弊端 1、错误示例菱形继承结构的二义性 2、代码示例使用虚继承解决菱形继承结构的二义性 一、多继承"弊端" 1、多继承被禁用的场景 禁止使用多继承的场景:在C语言环境中,多继承若干完整的有成员函数和成员变量的类,是不推荐的做法,实际开发中,绝对禁止使用上述类型的多继承; 2、多继承弊端 多继承会带来一系列的问题,诸如: 钻石问题菱形继承结构/二义性错误:当一个类继承自多个类时,如果这些类有共同的基类,那么会出现菱形继承结构,也称为钻石问题;该场景下,C编译...

文章目录 一、STL简介 1、STL概念 2、STL主要内容 二、STL代码示例 一、STL简介 1、STL概念 C语言的STL"标准模板库"英文全称"StandardTemplateLibrary", STL是一套强大的C库,其中包含了各种通用的数据结构和算法,如:向量、列表、队列、排序等; STL是C标准的一部分,所有的C编译器都应该支持该标准; 2、STL主要内容 STL的主要内容: 容器:存储数据的类;向量vector,双端队列deque,表list,队列queue,堆栈stack,集合set,多重集合multiset,映射map和多重映...

文章目录 一、STL标准模板库组成 1、STL十三个头文件 2、STL六大组件 二、代码示例STL容器存放基础数据类型 三、代码示例STL容器存放自定义类对象 四、代码示例STL容器存放对象指针 一、STL标准模板库组成 1、STL十三个头文件 STL标准模板库StandardTemplateLibrary主要包括容器/迭代器/算法三大类内容,其中容器和算法是通过迭代器 所有的C程序都会使用到STL标准模板库,使用STL提供的容器更加快速地开发程序代码; STL标准模板库的头文件中内置了各种常用的存储数据的模板类及是一个基础模板集合; STL标准模...

文章目录 一、多继承中应用"抽象类" 1、接口和抽象类 2、编程语言对接口和多继承的支持 3、C语言中接口实现 二、代码示例多继承中应用"抽象类" 一、多继承中应用"抽象类" 1、接口和抽象类 接口Interface和抽象类AbstractClass都是面向对象编程的重要概念,借助它们可以定义一个模板,令其他类实现接口或继承抽象类模板,可实现多态效果,这是面向对象最重要的操作; Java语言中,有明确的接口Interface和抽象类AbstractClass概念; C语言中,没有接口Interface概念,只有抽象类AbstractClass概念; ...

文章目录 一、引用的意义 1、意义说明 2、引用与指针对比 二、引用本质分析 1、引用的常量特征 2、引用和变量都是相同的内存空间的别名 3、引用所占内存空间与指针相同 三、引用在C编译器实现 1、C引用是常量指针 2、引用编译时会自动翻译为常量指针 3、引用与指针做形参分析 4、函数间接赋值与引用本质分析 一、引用的意义 1、意义说明 "引用"的意义: 引用作为已存在变量的别名,其效果等同于一级指针; 引用使用简单,不需要像指针一样,使用取地址符获取地址,使用指针符号访问数据; 2、引用与指针对比 引用与指针示例:下面的两个函数,分...

文章目录 一、变量的本质引入"引用"概念 1、变量的本质内存别名 2、引入"引用"概念已定义变量的内存别名 3、"引用"的优点 二、引用语法简介 1、语法说明 2、代码示例引用的定义和使用 三、引用做函数参数 1、普通引用必须初始化函数参数除外 2、代码示例使用普通变量作为参数(无法实现变量交换) 3、代码示例使用指针变量作为参数(C语言中实现变量交换的方法) 4、代码示例使用引用作为参数(C语言中实现变量交换的方法) 5、代码示例完整代码示例 四、复杂类型引用做函数参数 1、复杂类型参数的三种传递方式 I、传递结构体对象本身 II、传递结构体指针 III...

文章目录 一、人性薄凉 二、对人好是没有意义的 三、恩将仇报的人性逻辑 四、穷则独善其身 五、个人生存繁衍放在第一位 六、不要原谅背叛之人 一、人性薄凉 冷不过人性,凉不过人心; 感情是卑贱的,人际交往是人与人之间相互索取的过程,一旦自己的付出得不到别人的满足,双方的关系破裂; 每个人都有人性的弱点,不要因为对方一时的善良,就忘记了他是一个人,是人就有人性,有人性就会被利益驱使,巨大的利益面前,所有的人都不可信,包括父子关系,夫妻关系; 只有认清人性的阴暗面,才能享受人性的光辉;小白兔是没有资格享受的; 你要时刻准备着,你的亲密朋友,挚爱,慈祥的老父亲,善良的母亲,...

文章目录 一、const关键字与define宏定义相同点 1、相同点描述 2、代码示例变量作为数组大小报错 3、代码示例常量作为数组大小不报错 4、代码示例宏定义作为数组大小不报错 二、const关键字与define宏定义不同点 一、const关键字与define宏定义相同点 在C中,const可以作为替代define宏定义的手段; const常量定义: constinta=10; 宏定义: definea10 1、相同点描述 const关键字与define宏定义相同点: 二者都可以用于定义常量; 常量的特点是运行期间保持不变; 符...

文章目录 一、const常量内存分配时机 二、使用如下代码验证const常量内存分配时机 三、分析验证结果const常量在编译阶段分配内存 一、const常量内存分配时机 在上一篇博客中,讲到了获取const常量的地址,代码如下: //定义常量 //该常量定义在了符号表中 //符号表不在内存四区中,是另外一种机制 constinta=10; //定义一个指针 intp=NULL; //将常量a的地址赋值给指针 //在堆内存中重新分配一个4字节的空间 //将常量a的值10存储进去 p=(int)&a; 在所有的编程语言中,常量都具有如下特点:定义时分配内...

文章目录 一、C语言中的三目运算符 二、C语言中三目运算符不能作为左值 三、C语言中的三目运算符增强 四、C语言中三目运算符作为左值使用 一、C语言中的三目运算符 C语言中的"三目运算符",又称为"条件运算符",相当于一个简化版本的ifelse语句; 三目运算符语法: condition?expression1:expression2 上面的condition必须是一个返回布尔值的表达式,C语言中一般是int; 如果condition的值为非零值,也就是true,则整个三目运算符表达式返回expression1的值; 如果condition的值为零值,也就是f...

文章目录 一、函数返回值不能是"局部变量"的引用或指针 1、引用通常做右值 2、函数返回值特点 3、函数内的"局部变量"的引用或指针做函数返回值无意义 二、代码示例"局部变量"引用或指针做函数返回值测试 一、函数返回值不能是"局部变量"的引用或指针 1、引用通常做右值 之前使用引用时,都是作为右值使用,引用只在声明的同时进行初始化时,才作为左值, //定义变量a inta=10; //定义变量a的引用b int&b=a; 引用声明并初始化之后,就没有当过右值,这是因为引用的本质是指针常量,其本身不可被更改; 2、函数返回值特点 函数的...

文章目录 一、继承+组合模式的类对象构造函数和析构函数调用规则 1、场景说明 2、调用规则 二、完整代码示例分析 1、代码分析 2、代码示例 一、继承+组合模式的类对象构造函数和析构函数调用规则 1、场景说明 如果一个类 既继承了基类, 又在类中维护了一个其它类型的成员变量, 那么该类的构造与析构,就需要涉及到 类本身的构造函数和析构函数, 父类的构造函数和析构函数, 类成员变量的构造函数和析构函数; 2、调用规则 在继承+组合的情况下,构造函数与析构函数调用规则如下: 构造函数:父类->成员->自身; 首先,调用父类构...

文章目录 一、继承机制中派生类中的static关键字 1、子类继承父类静态成员 2、父类静态成员访问控制权限的改变 3、子类如何访问父类静态成员 4、静态成员使用要点 二、完整代码示例 一、继承机制中派生类中的static关键字 1、子类继承父类静态成员 子类继承父类静态成员:父类(基类)中使用static关键字定义的静态成员变量,可以被所有的子类(派生类)共享; 2、父类静态成员访问控制权限的改变 继承自父类的静态成员变量,仍然遵循继承中子类的访问控制特性, public公有继承:父类成员在子类中,访问控制权限不变,共有和保护成员可以在子类访问...

文章目录 一、继承的二义性 1、场景说明继承的二义性 2、继承中的二义性报错 3、完整代码示例 二、virtual虚继承 1、虚继承引入 2、虚继承语法 3、代码示例虚继承 一、继承的二义性 1、场景说明继承的二义性 A类是父类, B类和C类继承A类,是子类, D类多继承B类和C类,是孙子类; 假如A类中有成员变量x, 则子类B类和C类都会继承该成员变量x, D类多继承B类和C类,会分别从B和C各自继承一个成员变量x; D类中,从B,C两个父类中继承自爷爷类A的成员变量,会出现二义性; 代码如下: include"iostream" usi...

文章目录 一、继承中成员变量同名的处理方案 1、继承中成员变量同名的场景说明 2、使用域作用符区分同名成员变量 二、代码示例继承中成员变量同名的处理方案 一、继承中成员变量同名的处理方案 1、继承中成员变量同名的场景说明 子类继承父类的成员, 如果子类中定义了与父类成员变量同名的变量, 子类仍然可以继承父类的同名成员变量; 子类的成员变量与继承自父类成员变量的名称出现相同的情况, 使用域作用符::对同名的成员变量进行区分; 2、使用域作用符区分同名成员变量 子类中使用域作用符::处理同名成员变量的方案: 继承自父类的成员变量,使用父类名称::...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~