白景屹C++学习记录
文章平均质量分 90
白景屹C++学习记录
tzc_fly
2017-2021:华中科技大学本科,2021-至今:中山大学博士
展开
-
C++Prime Plus(7)
C++的输入输出是由库iostream中提供的一组类实现的;流C++把输入输出看成字节流,每个字节可以由程序解释成一个字符,或者只是一个二进制位构成的串;输入流:外围设备流向输入缓冲区,Input对象从输入缓冲区读数据再流向内存;输出流:内存流向Output对象,Output对象处理后传送给输出缓冲区,再流向外围设备;通常,输入对象来自类istream,输出对象来自类ostream。cin对象:类istream的对象,与标准输入设备(通常指键盘)关联在一起;原创 2022-09-16 23:04:24 · 527 阅读 · 0 评论 -
C++Prime Plus(6)
C++ STL原创 2022-08-15 13:23:20 · 349 阅读 · 0 评论 -
C++Prime Plus(5)
对于上一节中,用异常类型区分不同的错误,需要重复写catch,现在我们可以使用C++提供的标准类exception类,用作其他异常类的基类,其中有一个返回字符串的虚函数what(),用于返回出错的原因(利用了C++的多态性)auto_ptr:在赋值时,会将右边指针的控制权转移给左边指针,右边的指针就失去了控制权(自动指向NULL),这种情况下,对右边指针进行读写操作会出错;直接进行类型强制转换,编译器不会检查,会造成后期的内存读写错误,应该使用RTTI,如果返回空指针,对程序的后续行为执行才是安全的。...原创 2022-08-11 14:27:37 · 523 阅读 · 0 评论 -
C++Prime Plus(4)
同一个方法在派生类和基类中有不同的行为。例如基本账户信息包括基本账户类成员函数实现重要账户类定义重要账户类成员函数的实现派生类重定义的函数覆盖了基类的同名函数,即派生类对象调用这两个函数时,调用的是派生类重定义的函数。类模板是泛型程序设计的方式,是代码重用的一种方法,类模板可以让不同类型,同样行为的类共享代码。以ATM模拟为例,最开始我们定义了队列类为了重用代码,我们需要定义Customer类,并改名为Item,才能重用Queue或者注意。模板类的使用对象的使用。...原创 2022-07-18 15:20:04 · 664 阅读 · 0 评论 -
C++Prime Plus队列与ATM模拟
目录66.队列(1)—存储实现67.队列(2) —成员函数的实现68.队列(3) —ATM排队模拟66.队列(1)—存储实现队列:一种特殊的线性表,插入在表尾,删除在表头。队列类的特征假设我们有一个Queue类的声明:对于Queue的存储设计,可以基于数组,也可以基于链表:应当补充以下声明:链表的节点Node有两个元素:一个是Item,一个是指向Node结构类型的指针;Queue类里面还需要声明链表的尾部指针rear和头部指针front。这样定义符合队列的行为:从队头front删原创 2022-05-29 21:14:41 · 372 阅读 · 0 评论 -
C++Prime Plus(3)
目录51.抽象和类52.类的使用53.对象构造54.对象析构55.const与类56.this指针57.类作用域58.运算符重载59.运算符重载的实例60.友元61.运算符重载-成员或非成员62.类的类型转换63.拷贝构造函数与赋值运算符重载64.静态数据成员65.静态成员函数51.抽象和类类型的构成1.数据占用的空间量;2.如何解释内存中的比特串;3.该类型的实例化可以执行的操作;“类”是用户自定义的类型。定义类需要定义两个方面:成员声明(或类声明)和方法定义成员声明(或类声明):描述数据原创 2022-05-29 15:54:08 · 497 阅读 · 0 评论 -
const修饰的变量无法被外部引用
外部变量(外部链接)首先,回顾基础内容:静态变量:当程序运行结束变量才被回收,静态变量一旦生成,在整个程序运行期间都存在。对于静态变量,如果定义时没有指定初值,编译器会将值设为0;静态变量有三种:1.外部链接2.内部链接3.无链接对于外部变量,外部链接也称为外部变量,整个程序的所有函数都可以使用。注意,变量只能定义一次,但可以在多处声明。注意声明和定义的区别,如果想声明这个外部变量而非定义它,就使用关键字extern并且不要显式地初始化变量:extern int i; //原创 2022-05-13 13:36:23 · 917 阅读 · 0 评论 -
C++Prime Plus(2)
目录21.for循环(1)22.for循环(2)21.for循环(1)for循环作用:指定某段程序执行指定次数格式:for(计数器赋初值; 检查是否达到指定次数; 修正计数器值){ 计算过程;}我们使用for循环在计算机中的执行步骤为:通常,for循环用在循环次数确定的场景中。使用for访问字符串:字符串可以用字符数组,string类或指向字符的指针表示。注意,虽然VS中写法为const char* str,但我们将鼠标移动至str变量,它的类型显式其实为const char原创 2022-05-06 13:15:14 · 708 阅读 · 0 评论 -
C++Prime Plus(1)
目录1.C++简介2.程序生成(创建源码,编译和链接)3.进入C++4.C++语句5.函数入门6.整型7.char,bool(小整数)8.const与符号常量9.浮点数10.算术表达式11.数组12.C风格字符串13.C++风格字符串14.结构15.指针16.动态内存分配17.指针运算18.指针与字符串19.动态结构20.数组的替代品1.C++简介C++起源:带类的C语言,C++支持3种程序设计方式:过程化程序设计(比如C),面向对象程序设计,泛型程序设计(对变量的数据类型模糊化);过程化程序设计,类原创 2022-04-17 17:25:49 · 1622 阅读 · 0 评论 -
第九课.指针(四)
目录智能指针auto_ptr智能指针unique_ptr使用指针是危险的行为,可能存在野指针问题,可能造成内存泄漏事故,但指针是高效的,所以需要一种更安全的方式使用指针,一般有两种方案:使用更安全的指针:智能指针;不使用指针,使用更安全的方式:引用;C++中有四种常用的智能指针:unique_ptr,shared_ptr,weak_ptr,auto_ptr(但auto_ptr存在缺陷,已经在C++17中被废弃);智能指针auto_ptrauto_ptr比较简单直接,在auto_ptr销毁时,原创 2021-01-28 16:07:48 · 259 阅读 · 3 评论 -
第八课.指针(三)
目录C++程序存储区域划分C++动态分配和回收原则C++程序存储区域划分首先了解两个数据结构:栈和队列,栈的特点是先进后出,队列的特点是先进先出;在C++中,变量和函数通常存储在栈内,比如有以下程序:int a=0; //GVAR 全局初始化区int* p1; //bss 全局未初始化区int main() //text 代码区{ int b; //stack 栈区变量 char s[]="abc"; //stack 栈区变量 int* p2=NULL; //stack 栈区变量 c原创 2021-01-25 15:04:10 · 119 阅读 · 0 评论 -
第七课.指针(二)
指针的基本操作(一)&与*操作符char ch='a';char* cp=&ch;&操作符为取地址操作符,表达式&ch是一个右值,所以&ch不能作为可被修改的左值对于左值,一般说法,编译器为其单独分配了一块存储空间,可以取到其地址,比如常见的变量,左值可以放在赋值运算符左边;(也可以在赋值运算符右边)右值指的是数据本身,不能取到其自身地址,右值只能在赋值运算符右边*为间接引用操作符,表达式*cp实际上是一个变量,属于左值;表达式*cp+1则相原创 2021-01-18 12:54:56 · 164 阅读 · 0 评论 -
第六课.指针(一)
目录指针的概念左值与右值指针的概念比尔盖茨曾经说过,640K ought to be enough for everybody,但从现在的发展看来,硬件设备的更新已经远远超越早期,计算机体系中的存储层次如下(Memory Hierarchy):Remote secondary storage是云端存储,Local secondary storage是本地磁盘,Main memory是内存(内存数据断电会丢失),L1,L2 cache更加接近CPU,Register在CPU内部,可以直接操作数据;速度原创 2020-12-24 22:22:22 · 357 阅读 · 0 评论 -
第五课.容器(二)
目录字符串简介字符串变量与常量关于字符表示的说明Unicode编码字符串简介字符串变量与常量字符串变量需要满足两个条件:1.一个数组,其元素均是字符;2.最后一个元素以空字符'\0'结束(C++中单引号内是字符,双引号内是字符串);需要注意,定义字符串变量时,应当留意为空字符预留空间,使空字符自动加入到分配的空间中://注意必须是双引号char str[11]={"helloworld"};//或者简写char str[]={"helloworld"};如果写成char str[10原创 2020-12-01 20:12:20 · 3780 阅读 · 0 评论 -
第四课.容器(一)
C++设置有实用的基础容器,分为两大类:序列型容器,关联型容器第四课目录序列型容器:数组数组的下标序列型容器:数组数组是内存中一组连续的同类型存储区,连续也是物理意义上的连续,数组将连续的存储区合并为一个整体对象,比如:int arr[10]={1,2,3,4,5,6};数组的声明:int arr[10]类型名称int表示数组元素的类型;名称arr是数组的名称;整数10表示数组元素的个数;数组一旦声明,元素个数就不能再改变;在内存中的会连续存储(int占4字节),另外发现默认初始值原创 2020-11-29 14:44:36 · 285 阅读 · 0 评论 -
第三课.运算符与表达式
运算符与表达式数学是科技发展的基础,数学公式的意义十分重要,比如改变世界的欧拉方程:eπi+1=0e^{\pi i}+1=0eπi+1=0为了用机器创造世界,就需要机器能够表达公式;运算符运算符是编译器可识别并执行特定数学或逻辑操作的符号,C++内置丰富的运算符,并提供了以下类型的运算符:1.算术运算符;2.关系运算符;3.逻辑运算符;4.位运算符;5.赋值运算符;6.杂项运算符;表达式在程序中,运算符用于操作数据,数据被称为操作数,使用运算符将操作数连接而成的式子称为表达式;表原创 2020-11-15 13:35:57 · 911 阅读 · 0 评论 -
第二课.C++基础语法
编程语言的层次和类型1.机器语言:字节码,汇编语言:发明了字节码对应的助记符,但依然很难,涉及底层,要操作寄存器;2.编译型语言:C,C++,易于移植,提高了开发效率;3.解释型语言:Python,微软早期的Basic,只要安装了解释器,就可以运行;C++不一样,在不同的机器上,需要先编译,生成目标文件才能运行;4.脚本语言,bash,csh等,本身功能不强,但易于将同一平台上别的程序进行组装;可见,使用层次越来越接近人类,但运行效率逐渐降低;编译型语言编译型语言一般需要经历编译和链接过程,才原创 2020-11-12 09:54:40 · 173 阅读 · 0 评论 -
第一课.绪论
C++概览C++被定义为更好的C语言,其用途广泛,可以说,没有什么是C++完成不了的任务,从大型桌面应用(Microsoft office)到解释器(Python,Java)与科学计算库(Tensorflow,OpenCV)等,C++均可实现,C++尤其适合当下的物联网浪潮,因为嵌入式的开发,用C++再好不过;C++优点无数,但学习路线陡峭,C++是公认的最难学的语言,所以要多吸取他人经验,少走弯路;C++历史发展最开始应当从语言统一的重要性说起:巴别塔是《圣经·旧约·创世记》第11章故事中人们建造原创 2020-11-10 20:55:48 · 196 阅读 · 0 评论