![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 83
从入门到精通
Reset。
这个作者很懒,什么都没留下…
展开
-
C++ 多态及多态原理
一、多态的概念多态:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态 。1. 多态的定义及实现多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。多态构成的条件: 前提:继承必须通过基类的指针或者引用调用虚函数被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写class Person{public: //虚函数 virtual void BuyTicket() { cout << "全票" <原创 2021-08-30 16:56:19 · 769 阅读 · 5 评论 -
复杂的菱形继承及菱形虚拟继承
单继承:一个子类只有一个直接父类时称这个继承关系为单继承多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承菱形继承:菱形继承是多继承的一种特殊情况。菱形继承的例子:class Person{public: string _name; // 姓名};class Student : public Person{protected: int _num; //学号};class Teacher : public Person{protected: int _id;原创 2021-08-27 14:59:25 · 218 阅读 · 0 评论 -
C++ 面向对象之继承
文章目录一、继承的概念及定义1.继承的概念2.继承定义二、一、继承的概念及定义1.继承的概念继承机制:面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。原有的类称为父类或基类,而继承了该类的类称为子类或派生类。2.继承定义继承格式:class [派生类名] : [继承方式] [基..原创 2021-08-27 10:19:28 · 389 阅读 · 1 评论 -
C++的强制类型转换
隐式类型转化:相关类型的转换,即意义相似的类型。强制类型转化:不相关类型的转换,比如:指针和整型.static_cast用法:static_cast<类型说明符> (变量或表达式)作用:显式、静态地执行隐式类型转换和用户定义的转换,不进行运行时检查。分类:用于基本类型数据的转换 float a = 2.3; int b = static_cast<int>(a);把空指针转换成目标类型的空指针把任何类型的表达式转换为void类型父类指针/引用到子类指.原创 2021-08-26 11:16:02 · 625 阅读 · 3 评论 -
C++ 特殊类的设计(单例模式)
1.请设计一个类,只能在堆上创建对象实现方法:将类的构造私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建class HeapOnly{public: //在堆上创建对象 static HeapOnly* HeapCreate() { return new HeapOnly; }private: //构造函数私有 HeapOnly() {} //防拷贝 HeapOnly(const HeapOnly原创 2021-08-25 16:49:23 · 370 阅读 · 4 评论 -
C++11 智能指针
智能指针的原理RAIIRAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源。 借此,我们实际上把管理一份资源的责任托管给了一个对象。这种做法有两大好处:不需要显式地释放资源。采用这种方式,对象所需的资源在其生命期内始终保持有效。我们使用RAII的思想设计Smart原创 2021-08-19 23:56:40 · 1302 阅读 · 2 评论 -
C++11 右值引用
C++98中提出了引用的概念,引用即别名,引用变量与其引用实体公共同一块内存空间,而引用的底层是通过指针来实现的,因此使用引用,可以提高程序的可读性。右值与左值的区分:左值:普通类型的变量,因为有名字,可以取地址,都认为是左值。如果表达式运行结果或单个变量是一个引用则认为是左值。右值:常量临时变量/匿名变量将亡值:将要被释放的值一、引用与右值引用比较1. 普通引用只能引用左值,不能引用右值;const引用可以引用左值,也可以引用右值 //普通引用 int a = 10;原创 2021-08-13 01:06:23 · 527 阅读 · 0 评论 -
C++ String类的模拟实现(构造、析构、拷贝、赋值运算符重载)
我们在写代码的过程中,直接使用string类,不用考虑底层的实现,很方便。但是只有我们理解底层的实现,用起来才更得心应手。默认成员函数构造string类有三个成员变量: char* _data;//存放字符串的首地址 int _size;//有效字符的个数 int _capacity;//可以保存的最大有效字符个数默认构造1.先开辟字符串大小的空间,要包含’\0’的位置2.再将字符串拷贝到新开辟的空间中 String(const char* str = "") { _size =原创 2021-04-13 22:55:19 · 546 阅读 · 4 评论 -
C++ const修饰类的成员函数
将const修饰的类成员函数称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。使用方法:直接在要修饰的成员函数后面加const。class A{public: //this的指向不能发生改变 void setA(int b) //this: A* this const { _a = b; } //const修饰成员函数 //this的指向不能发生改变,所指向的内容也不能改变 int get原创 2021-04-02 00:15:58 · 424 阅读 · 0 评论 -
C++ 迭代器失效及解决办法
迭代器失效的几种情况,以vector类为例1. 操作已经释放的空间我们先来看一段代码这段代码乍一看好像是没有什么问题,输出第一个元素的值,那结果是不是我们想的那样?通过结果我们可以看出,第一次打印没有出错,但是第二次打印却报错,是为什么?我们第一次打印完后,进行扩容,向系统申请一块更大的空间,会将原来空间的数据拷贝到新开辟的空间,最后会将原来的空间释放。但此时it指向的是原有空间,原有空间释放,it就会成为野指针。第二次打印,对it作解引用,访问已经释放的空间,程序就会崩溃并且也不安全。只要涉原创 2021-03-31 14:37:26 · 1149 阅读 · 0 评论 -
初识C++模板----函数模板 与 类模板的使用
文章目录前言一、函数模板 1. 函数模板的实例化 2. 模板参数的匹配规则二、类模板前言我们已经学过函数重载,函数重载可以构建通用的交换函数,函数体大致相同,交换的数据类型不同,虽然这样用起来比较方便,但也有一些弊端。重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数。一个出错可能所有的重载均出错。既然这样,那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢? 下面我们一起来学习。一、函数模板所谓函数模板,实际上是建立一个通用函数,其..原创 2021-03-18 11:41:50 · 251 阅读 · 0 评论 -
C++内存管理----new与delete知识总结(超详细)
文章目录前言一、C/C++内存管理方式1. new/delete操作内置类型2. new和delete操作自定义类型二、使用步骤1.引入库2.读入数据总结前言我们在C语言中通过malloc、realloc、calloc和free函数,对内存进行动态管理。C语言内存管理方式在C++中也可以继续使用,但在C++中我们会有对象的创建和资源清理,此时malloc和free函数,就不能很好满足我们的需求,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。说白了,new和de.原创 2021-03-17 21:15:16 · 771 阅读 · 0 评论 -
C++入门----友元函数 & 友元类 & 内部类
文章目录 一、友元1. 友元函数2. 友元类二、内部类 一、友元1. 友元函数友元函数的介绍:友元函数可以直接访问类的私有成员定义在类外部的普通函数需要在类的内部声明,声明时需要加friend关键字,声明可以放在类的任何地方,不受类访问限定符限制下面通过重载operator<<深入理解友元函数:但是上面通过友元函数解决,还是会有一点问题,没有办法进行连续的输出。此时,我们应该关注返回值:附上代码:class Date{public: //友元函数声明 .原创 2021-03-13 20:21:59 · 198 阅读 · 0 评论 -
C++入门----初始化列表 & static成员
文章目录前言一、初始化列表1. 初始化列表二、友元三、static成员四、内部类前言一、初始化列表构造函数体赋值:虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造函数体中的语句只能将其称作为赋初值,而不能称作初始化。因为初始化只能初始化一次,而构造函数体内可以多次赋值。1. 初始化列表初始化列表:真正初始化的位置形式:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。举例:..原创 2021-03-13 14:12:38 · 478 阅读 · 0 评论 -
c++入门 ----- 引用 & 内联函数 & auto & 范围for
文章目录前言一、引用1. 引用的概念2. 引用特性3. 常引用二、内联函数前言一、引用1. 引用的概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。类型& 引用变量名(对象名) = 引用实体2. 引用特性 1. 引用在定义时必须初始化 2. 一个变量可以有多个引用相当于,一个实体可以有多个别名。 3. 引用一旦引用一个实体,再不能引用其他实体3. 常引用二、内联函数...原创 2021-03-02 19:40:33 · 337 阅读 · 0 评论 -
为什么C++支持函数重载,而C语言不支持函数重载呢?(有图易懂)
首先,我们要知道什么是函数重载?函数重载:C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数 或 类型 或 顺序)必须不同。那么,为什么C++支持函数重载,而C语言不支持函数重载呢?C语言例如在c语言中,以下函数,只给声明不给定义!我们发现,在C语言编译器中,通过_函数名来区分函数,如果函数名称相同:此时就会出现错误,在编译器看来都是_add函数,当第二个_add出现时,编译器发现这个函数名存在,就会出现重定义问题。gcc我们首先对test.c文件进原创 2021-02-28 21:26:41 · 256 阅读 · 0 评论 -
初学c++总结(命名空间、缺省参数、函数重载)
文章目录前言一、命名空间1. 命名空间定义1) 嵌套2) 分段定义2. 命名空间中成员的访问形式1) 命名空间 :: 成员 (推荐使用)2) using 命名空间 :: 成员 (推荐使用)3) using namespace 命名空间二、缺省参数 缺省参数分类1. 全缺省参数2. 半缺省参数三、函数重载前言刚开始学习c++,就要把细小的知识点,掌握扎实,多练习,多总结。一、命名空间功能: 对标识符的名称进行本地化,以避免命名冲突或名字污染1. 命名空间定义namespace..原创 2021-02-27 23:42:46 · 139 阅读 · 0 评论