![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++学习
文章平均质量分 73
知识点总结
wzh_scuec
这个作者很懒,什么都没留下…
展开
-
Linux C/C++ 多线程开发 - 基础介绍
Linux C/C++多线程开发基础介绍原创 2022-11-06 11:39:42 · 969 阅读 · 1 评论 -
C++设计模式:单例模式
单例模式是指在整个系统的生命周期里,保证一个类只能产生一个实例,确保该类的唯一性。原创 2022-11-05 17:10:58 · 811 阅读 · 0 评论 -
XML - XML学习/XML文件解析器(C++)实现
XML学习以及XML文件解析器实现(C++)模仿大佬,造轮子,造轮子原创 2022-11-02 21:24:40 · 2560 阅读 · 0 评论 -
C++:类型转换
类型转换 在C++中,类型转换分为显式转换和隐式转换隐式转换在C++语言中,某些类型之间互有关联,当两者进行相关运算的时候,可以用另一种关联类型的对象或值来代替。简而言之,如果两种类型可以相互转换,那么他们彼此就是关联的例如简单的加法运算,int val = 3.14+3,在C++语言中,C++不会直接将两个不同类型的数值进行相加,而是根据类型转换规则设法将运算对象的类型统一后在进行求值,但,以上的过程不需要程序员的介入,甚至不需要程序员的了解,故,它们被称为隐式转换(implicit conve原创 2022-04-15 20:23:00 · 1251 阅读 · 0 评论 -
C++相关基础了解
C++相关基础特性了解空指针 空指针(null pointer)不指向任何对象,在试图使用一个指针之前代码可以首先检查它是否为空。以下列出几个生成空指针的方法:int *p1 = nullptr; // 等价于int *p1 = 0int *p2 = 0; // 直接将p2初始化为字面常量0// 需要首先#include<cstdlib>int *p3 = NULL; // 等价于int *p3 = 0;得到空指针最直接的方法就是用字面值nullptr来初始化指针,这也是C+原创 2022-01-24 15:02:08 · 399 阅读 · 0 评论 -
字符串(string),向量(vector)和数组学习总结
字符串(string),向量(vector)和数组string和vector是两种最重要的标准库类型,string支持可变长字符串,vector表示可变长集合数组,与之相配套的标准库类型中的迭代器,属于string和vector的配套类型,经常用于访问string中的字符或者vector中的元素命名空间的using声明在C++的初步学习之中,我们往往会敲这样的一段代码,using namespace std;一开始的学习之中,我们也不知道其中的意思,只需要明白照着敲就行简单来说,到目前为止,我原创 2022-01-15 15:11:16 · 3425 阅读 · 0 评论 -
随机数学习总结
随机数 在新标准出现之前,C和C++都依赖于一个简单的C库函数rand来生成随机数。而rand函数界限:在stdlib.h头文件中有宏**#define RAND_MAX 0x7fff**,即rand产生一个0~0x7fff的均匀分布的伪随机整数,每个随机数的范围在0和一个系统相关的最大值(至少为32767)之前rand函数调用:rand()函数的每次调用前都会查询是否调用过srand(seed),是否给seed设定了一个值,如果有那么它会自动调用srand(seed)一次来初始化它的起始值若原创 2022-01-15 15:08:48 · 382 阅读 · 0 评论 -
C++赋值兼容规则
C++赋值兼容规则基类与派生类对象之间的赋值兼容关系不同类型数据之间的自动转换和赋值,称为赋值兼容。在基类和派生类对象之间也存在赋值兼容关系,基类和派生类对象之间的赋值兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类对象来替代根据赋值兼容规则,在基类Base的对象可以使用的任何地方,都可以用派生类Derived的对象来替代,但只能使用从基类继承来的成员。(1)派生类对象可以向基类对象赋值,即用派生类对象中从基类继承来的数据成员,逐个赋值给基类对象的数据成员。例如:Base b; //定义原创 2021-06-09 19:45:51 · 2159 阅读 · 1 评论 -
异常处理操作
异常处理异常处理的基本概念1.为什么要异常处理在设计各种软件系统中,处理程序中的错误和其他反常行为是非常困难的,比如服务器上长期允许的网络服务程序将80%的代码用于实现错误检测和错误处理异常是指程序运行时出现的不正常。程序运行过程中可能会出现下列异常:(1)CPU异常。在计算过程中,出现除数为0的情况(2)内存异常:使用new或malloc申请动态内存但存储空间不够;数组下标越界;使用野指针,迷途指针读取内存(3)设备异常:无法打开文件,或能够打开文件但文件有损坏,从而无法读取数据;正在读取磁原创 2021-05-26 09:42:49 · 437 阅读 · 0 评论 -
类模板
类模板类模板的定义原创 2021-05-25 19:00:44 · 4507 阅读 · 0 评论 -
队列(queue)和栈(stack)
队列(queue)和栈(stack)队列queue队列(queue)是一种先进先出FIFO(first in first out)的线性表。它只允许在表的一端进行插入元素,而在另一端删除元素,最早进入队列的元素最早离开。在队列中,插入的一段称为队尾(back),删除的一段称为队头(front)队列定义在< queue >头文件中队列类成员函数原型如下://----容量capacity----bool empty(); //测试是否为空队列size_type size(); //返回原创 2021-05-24 16:45:21 · 595 阅读 · 0 评论 -
列表list
列表list列表的使用list是一个双向链表,因此它的内存空间是可以不连续的,通过指针来进行数据的访问,这使得list的随机访问效率比较低,因此list没有提供[]运算符的重载。但list可以很好的支持任意地方的插入和删除操作,只需要移动指针即可列表定义在< list >头文件中列表类成员函数原型如下://----迭代器iterators----iterator begin(); //返回表头元素为迭代器起始iterator end(); //返回表尾元素为迭代器结束revers原创 2021-05-23 17:19:30 · 122 阅读 · 0 评论 -
典型运算符的重载
典型运算符的重载构造“分数”类例:构建一个“分数”类Fraction原创 2021-05-23 13:43:21 · 181 阅读 · 1 评论 -
虚函数
虚函数虚函数实现多态的条件被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用就是实现多态性——以共同的方法,对不同的对象采取不同的策略1.虚函数的定义虚函数只能是类中成员函数,且不能是静态的。在成员函数定义或声明前面加上关键字virtual,即定义了虚函数:class 类名 { //类体 ... virtual 返回类型 函数名(形式参数列表); //虚函数 ...};class Point { //Point类表示平面上的点 ... virtual double ar原创 2021-05-21 13:41:29 · 1597 阅读 · 0 评论 -
多态性
多态性多态性的概念派生一个类的原因并非总是为了继承或添加新成员,有时是为了重新定义基类的成员,使基类成员“获得新生”面向对象程序设计的真正力量不仅仅是继承,而是允许派生类对象像基类对象一样处理,其核心机制就是多态和动态联编多态是指同样的消息被不同类型的对象接收时导致不同的行为。所谓消息是指对类成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数从广义上说,多态性是指一段程序能够处理多种类型对象的能力在C++中,这种多态性可以通过重载多态(函数和运算符重载),强制多态(类型强制转换),原创 2021-05-20 21:33:03 · 4986 阅读 · 0 评论 -
多重继承
多重继承多重继承派生类除去一个类从一个基类派生,C++还支持一个派生类同时继承多个基类1.多重继承派生类的定义如果已经定义了多个基类,那么定义多重继承的派生类的形式为:class 派生类名:访问标号1 基类名1,访问标号2 基类名2,... { //类体 成员列表};class A { };class B : public A { }; //A-Bclass C : public A { }; //A-Cclass D : public B,public C { }; //B-D,C原创 2021-05-17 20:30:51 · 3351 阅读 · 0 评论 -
向量vector
向量vector向量的使用迭代器(iterator) 是一种允许检查容器内元素,并实现元素遍历的数据类型。迭代器提供了比下标操作更一般化的方法:所有的标准库容器都定义了相应的迭代器类型,只有少数容器支持下标操作。因为迭代器对所有的容器都适用,现代C++程序更倾向于使用迭代器而不是下标操作访问容器元素向量vector是C++标准模板库中的内容。vector是一个容器,它能够存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,可以动态改变大小使用向量,需要在程序中添加<原创 2021-05-17 13:08:27 · 242 阅读 · 0 评论 -
运算符重载
运算符重载运算符重载的概念运算符重载就是对现有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型所谓重载,就是重新赋予新的含义。例如函数重载,就是对一个已有的函数赋予新的功能C++语言本身就重载了很多运算符,例如<<是位运算中的左移运算符,但在输出操作又是与流对象cout配合是的流插入运算符,>>运算符也是C++允许程序员重载大部分运算符,使运算符符合所在的上下文环境。虽然重载运算符的任务也可以通过显式的函数调用来完成,但是使用运算符重载往往使程序更清晰运算符函原创 2021-05-16 14:57:46 · 546 阅读 · 0 评论 -
派生类的构造函数和析构函数
派生类的构造和析构函数派生类的构造函数在定义派生类时,派生类并没有把基类的构造函数和析构函数继承下来。因此,对继承的基类成员初始化的工作要由派生类的构造函数承担,同时基类的析构函数也要被派生类的析构函数来调用1.派生类构造函数的定义在执行派生类的构造函数时,使派生类的数据成员和基类的数据成员同时都被初始化。其定义形式如下:派生类名(形式参数列表):基类名(基类构造函数实参列表),派生类初始化列表{ 派生类初始化函数体}“基类名(基类构造函数实参列表)”即是调用基类构造函数,而派生类新增的原创 2021-04-29 17:24:33 · 1884 阅读 · 0 评论 -
标准库简介—C++学习
标准库C++标准库C++标准定义了庞大且功能丰富的标准库,其内容分为10类,包括:C1语言支持C2输入/输出C3诊断功能C4通用工具C5字符串C6容器C7迭代器C8算法C9数值操作C10本地化C++标准库所有的头文件都没有扩展名(.h),内容总共在51个标准头文件中定义。其中18个< cname >形式的头文件( < complex > 除外)内容与标准C语言的name.h头文件相同,但包含了C++扩展的功能在< cname >形式的头文件原创 2021-04-22 16:33:46 · 1269 阅读 · 1 评论 -
预处理命令-C++学习(二)
预处理命令文件包含文件包含命令的作用是指把指定的文件插入到该命令所处的位置上取代该命令,然后再进行编译处理,相当于将文件的内容“嵌入”到当前的源文件中一起编译文件包含命令为**#include**,有两种命令形式:1.第一种形式:#include<头文件名>2.第二种形式:#include"头文件名"1.文件包含的路径问题文件包含命令中的头文件名可以写成绝对路径的形式,例如:#include"C:\DEV\GSL\include\gsl_linalg.h"#includ原创 2021-04-21 21:25:04 · 195 阅读 · 0 评论 -
预处理命令-C++学习(一)
预处理命令什么是预处理命令预处理命令不是C++本身的组成部分,更不是C++语句,它是C++标准规定的可以出现在C++源程序文件中的命令这些命令必须以“#”开头,结尾不加分号,可以放置在源程序中的任何位置,其有效范围是从出现位置开始到源文件到源程序文件末尾宏定义在C++...原创 2021-04-18 19:38:10 · 137 阅读 · 0 评论 -
派生类成员的访问
类的保护成员对派生类来说,成员分为两大类:(1)一类是从基类继承过来的成员(2)一类是自己新生成的成员如果没有继承,一个类只有两种类型的访问者:类成员和类用户将类划分为private和public访问级别反映对访问者的访问权限:类成员只能访问公有成员,类成员和友元既可以访问公有成员也可以访问私有成员有了继承,就有了类的第三种访问者:派生类成员派生类通常需要访问(一般为私有的)基类成员,为了允许这种访问而仍然禁止外部对基类的一般访问,可以使用protected访问标号。类的protected部分原创 2021-03-25 14:13:55 · 1752 阅读 · 0 评论 -
派生类的定义
类的继承与派生基类与派生类继承(inheritance)是面对对象程序设计的一个重要特性,是软件复用(software reuse)的一个重要形式。继承允许在原有类的基础上创建新的类,新类可以从一个或多个原有类中继承数据成员和成员函数,并且可以重新定义或增加新的成员,从而形成类的层次。继承具有传递性,不仅支持系统的可重用性,而且还促进系统的可扩充性。类的对象是各自封闭的,如果没继承性机制,则类对象中数据,函数就会出现大量重复。继承改变了传统程序设计对不再使用的数据类型和函数进行改写甚至重写的方法,原创 2021-03-23 17:37:24 · 11766 阅读 · 0 评论 -
友元函数和友元类
友元函数C++提供友元(friend)机制,允许一个类将其非公有成员的访问权授予指定的函数或类。友元的声明只能出现在类定义的内部的任何地方,由于友元不是授予友元关系(friendship)的那个类的成员,所以它们不受访问控制的影响。通常,将友元声明放在类定义的开始或结尾。友元可以是普通的函数,或已定义的其他类的成员函数,或整个类。将一个函数设为友元,称为友元函数(friend function),将一个类设为友元,称为友元类(friend class)。友元类的所有成员函数都可以访问授予友元关系的那个类原创 2021-03-22 21:10:49 · 1125 阅读 · 0 评论 -
静态成员
静态成员静态数据成员可以定义类的静态成员,能够实现同类的多个对象之间数据共享。使用类的静态成员的优点是:静态成员的名字是在类的作用域中,因此可以避免与其他类的成员或全局对象名字冲突静态成员可以实施封装,可以是私有成员,而全局对象不可以静态成员是与特定类关联的,结构清晰(1)静态数据成员例:class employee { //雇员类定义 private: int empNo; int id; char *name; static int count; //静态数据成员原创 2021-03-21 19:28:22 · 320 阅读 · 0 评论 -
常对象,常成员,常指针,常引用
常对象,常数据成员,常成员函数C++有不少措施保护数据的安全性,如private保护类的数据成员等。但对于一些共用的数据,如函数实参与形参等,我们可以在不同的场合通过不同的途径访问同一个数据对象。有时不经意的误操作会改变数据的值,而这是人们所不希望出现的既要数据能在函数间共享,又要保证它不被任意修改,可以使用const限定,即把数据定义为只读的常对象在定义对象时使用const限定,称它为常对象,定义的一般形式为:类名 const 对象名1(实参列表),对象名2,......;或const 类原创 2021-03-19 20:12:22 · 884 阅读 · 0 评论 -
类作用域,对象生命期,const限定
类的作用域同变量,函数一样,类也有自己的作用域(1)每个类都定义了自己的作用域和唯一的类型。在类体内声明类成员,将成员名引入类的作用域中。两个不同的类具有两个独立的类作用域。即使两个类具有完全相同的成员列表,它们也是不同的类型。每个类的成员不同于任何其他类的成员。例如:class A { public: int i;double d; };class B { public:int i;double d; };class Data { public: int member;void memfunc原创 2021-03-16 15:10:36 · 238 阅读 · 0 评论 -
成员指针及this指针
类成员指针对象的成员要占用存储空间,因此也有地址,可以定义指向对象成员的指针变量,一般形式为:数据成员类型 *指针变量名 = 初值;例如:int *ptr = &now.hour; //指向对象数据成员的指针变量C++比C语言有更加严格的静态类型,更加强调类型安全和编译时检查因此,C++的指针被分成数据指针,函数指针,数据成员指针,成员函数指针四种,而且不能随便相互转换。其中前两种是C语言的,称为普通指针(ordinary pointer);后两种是C++专门为类扩展的,称为成员指针原创 2021-03-15 17:40:57 · 178 阅读 · 0 评论 -
对象数组和对象指针
对象数组的定义和使用可以简单的理解类就是我们自定义的数据类型,而对象就是类的实例,因此我们也可以构造对象数组和对象的指针将具有相同类类型的对象有序地集合在一起便构成了对象数组,以一维对象数组为例,其定义形式为:类名 对象数组名[常量表达式];一维对象数组有时也称为对象向量,它的每个元素都是相同类型的对象例如表示平面上若干个点,可以这样定义:Point points[100]; //表示100个点关于对象数组的说明:(1)在建立对象数组时,需要调用构造函数。如果对象数组有100个元素,就需原创 2021-03-14 10:34:15 · 557 阅读 · 0 评论 -
析构函数
析构函数的定义析构函数: 当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统会自动执行析构函数。析构函数往往用来做“清理善后”的工作 (例如在建立对象时用new开辟了一段内存空间,则在该对象消亡前应在析构函数中用delete释放这段存储空间)C++规定析构函数是类名前面加一个波浪号(~)。其定义形式为:~类名() { 函数体}析构函数不返回任何值,没有返回类型,也没有函数参数。由于没有函数参数,因此它不能被重载。换言之,一个类可以有多个构造函数,但是只能有一个析构函数何时调用析构函数原创 2021-03-11 12:36:38 · 1985 阅读 · 2 评论 -
复制构造函数与合成复制构造函数
复制构造函数和合成复制构造函数复制构造函数复制构造函数又称为拷贝构造函数,它是一种特殊的构造函数。它的作用就是用一个已经生成的对象来初始化另一个另一个同类的对象变量的初始化:int a=10;int b=a;对象的初始化:point pt1(10,20); point pt2 = pt1;复制构造函数定义的一般形式为:类名(const 类名&obj) { 函数体}例如:class Point { //Point类 public: Point() : x(0),y(原创 2021-03-10 19:39:41 · 432 阅读 · 0 评论 -
默认构造函数和复制构造函数
定义默认构造函数默认构造函数就是在没有显示提供初始化时调用的构造函数,它是一个不带参数的构造函数。如果定义某个类的对象时没有提供初始化式就会使用默认构造函数定义默认构造函数(default constructor)的一般形式为:类名() { 函数体}它由不带参数的构造函数,或者所有形参均是默认参数的构造函数定义。与默认构造函数相对应的对象定义形式为:类名 对象名;任何一个类有且只有一个默认构造函数。如果定义的类中没有显式定义任何构造函数,编译器会自动为该类生成默认构造函数,称为合成默认构原创 2021-03-09 13:06:40 · 571 阅读 · 0 评论 -
构造函数的重载及带默认参数的构造函数
构造函数的重载在一个类中可以定义多个构造函数版本,即构造函数允许被重载,只要每个构造函数的形参列表是唯一的。一个类的构造函数数量是没有限制的。一般地,不同的构造函数允许建立对象时用不同的方式来初始化数据成员。构造函数重载举例:#include<iostream>using namespace std;class Point { //Point类表示平面上的点 public: Point() { x=y=0; } //无参数的构造函数 Point(int a,int b) :原创 2021-03-08 16:41:05 · 2405 阅读 · 1 评论 -
什么是构造函数及定义
什么是构造函数建立一个对象时,通常最需要立即做的工作是初始化对象,如对数据成员赋初值构造函数就是用来在创造对象时初始化对象,为对象数据成员赋初始值原创 2021-03-08 13:26:02 · 22809 阅读 · 1 评论 -
对象的引用,赋值,指针
对象成员的引用访问对象中的成员可以有3种方法:(1)通过对象名 和对象成员引用运算符(.)访问对象中的成员;(2)通过指向对象的指针 和指针成员引用运算符(->)访问对象中的成员;(3)通过对象的引用变量 和对象成员引用运算符(.)访问对象中的成员;通过对象名访问对象中的成员访问对象中数据成员的一般形式为:对象名.成员名调用对象中成员函数的一般形式为:对象名.成员函数(实参列表)需要注意,从类外部只能访问类公有的成员 。例如已定义一个类:class Data { //D原创 2021-03-07 14:35:00 · 1015 阅读 · 0 评论 -
对象的定义和使用
对象的定义定义一个类时,也就是定义了一个具体的数据类型。若要使用类,需要将类实例化,即定义该类的对象需要注意,我们之前也使用了“对象”一词,那里主要是指数据对象从现在起,“对象”一词专门表示类的实体先定义类类型再定义对象有两种定义对象的形式:(1)将类的名字直接用作类型名:类名 对象名列表;(2)指定关键词class 或struct,后面跟着类的名字:class 类名 对象名列表;或者struct 类名 对象名列表;对象名列表是一个或多个对象的序列,各对象之间用逗号(,)原创 2021-03-06 13:09:56 · 1370 阅读 · 0 评论 -
类的数据,成员函数,声明
类的数据成员在类中声明数据成员类的数据成员的声明类似于普通变量的声明。如果一个类具有多个同一类型的数据成员,则这些成员可以在一个成员声明中指定。class Cube { //Cube类表示立方体 ... //其他成员 long color; //数据成员 double x,y,z,side; //数据成员};类的数据成员可以是基本类型,数组,指针,引用,共用体,枚举类型,void指针,const限定等数据类型。例如:class ADT { //类成员数据类型 ... //成员函数原创 2021-03-05 20:06:39 · 1401 阅读 · 0 评论 -
类的定义
定义类定义类C++语言——面对对象的程序设计思想实现软件设计的产业化自然界是由实体(对象)组成的抽象:对具体对象(问题)进行概况,抽出这一类对象的公共性质加以描述的过程(1)数据抽象(2)行为抽象封装:将抽象出的数据成员,行为成员想组合,将他们视为一个整体——类使用者不需要了解具体的实现细节只需要通过接口使用类的成员即可继承与派生:保持原有类特性的基础上,进行更具体的说明类(class)是用户自定义数据类型。如果程序中要使用类型,必须根据实际需要定义,或者使用原创 2021-03-05 16:14:33 · 6135 阅读 · 3 评论 -
自定义数据类型——结构体
结构体的定义与使用数组是一种数据形式,其特点是多个相同类型的元素集合起来结构体是另一种重要的数据形式,特点是将不同类型的成员组合起来数组和结构体形成了两种风格迥异的聚合方式,通过他们以及相互组合,嵌套的机制可以构造出复杂的,满足应用要求的自定义数据类型定义结构体类型结构体允许将不同类型的数据元素组合到一起形成一种新的数据类型,其声明形式为:struct 结构类型名 { 成员列表};例如可以通过如下声明建立表示学生信息的数据类型...原创 2021-03-05 11:24:20 · 1134 阅读 · 0 评论