C++
文章平均质量分 59
The Kite
这个作者很懒,什么都没留下…
展开
-
C++ Primer Plus----第十三章--类继承
本章内容包括:is-a关系的继承;如何以公有方式从一个类派生出另一个类;构造函数成员初始化列表;向上和向下强制转换;早期(静态)联编与晚期(动态)联编;何时及如何使用公有函数。原创 2024-01-19 15:25:51 · 486 阅读 · 0 评论 -
C++ Primer Plus----第十二章--类和动态内存分布
本章内容包括:对类成员使用动态内存分配;隐式和显式复制构造函数;隐式和显式重载赋值运算符;在构造函数中使用new所必须完成的工作;使用静态类成员;将定位new运算符用于对象;使用指向对象的指针;实现队列抽象数据类型(ADT)。原创 2023-12-29 19:41:03 · 1032 阅读 · 0 评论 -
C++ Primer Plus----第一章--预备知识
本章节内容包括:C语言和C++的发展历史和基本原理;过程性编程和面向对象编程;C++是如何在C语言的基础上添加面向对象概念的;C++是如何在C语言的基础上添加泛型编程概念的;原创 2023-12-29 10:27:02 · 428 阅读 · 0 评论 -
C++ Primer Plus----第十一章--使用类
一般来说,访问私有类成员的唯一方法是使用类方法。C++使用友元函数来避开这种限制。要让函数成为友元,需要在类声明中声明该函数,并在声明前加上关键字friend。C++扩展了对运算符的重载,允许自定义特殊的运算符函数,这种函数描述了特定的运算符与类之间的关系。运算符函数可以是类成员函数,也可以是友元函数(有一些运算符函数只能是类成员函数)。要调用运算符函数,可以直接调用该函数,也可以以通常的句法使用被重载的运算符。1argument-list表示该运算符的操作数。原创 2023-12-11 16:17:32 · 449 阅读 · 0 评论 -
C++ Primer Plus----第十章--对象和类
创建一个类的对象时,系统会为每一个对象分配一定的存储空间,以存放成员。对象空间的起始地址就是对象的指针。可以定义一个指针,用来存放对象的指针。原创 2023-11-13 16:04:42 · 529 阅读 · 0 评论 -
C++ Primer Plus----第二章--预备知识
在一个c文件里可能会有很多个函数,在每个函数里都有下面这句代码;上面就说明了,要存储一个整数,使用了名称a来表示该整数的值(这里为5);整型:char ,short,int,long和long long;自定义函数最好写在main函数的后面,同时要在main函数前进行声明;信息存放在计算机中,程序必须记录3个基本属性:信息将存储在哪里,要存储什么值,存储何种类型的信息;可以这么理解,在函数里面它是局部的,函数外面它是全局的,大家所共用的;我们自定义的函数可以很简单,但是函数的特性都要有;原创 2023-07-27 18:11:04 · 178 阅读 · 0 评论 -
C++学习第十天----指针
但从概念上说,&tell[0]是一个2字节内存块的地址,而&tell是一个20字节内存块的地址;因此,表达式tell +1将地址值加2,而表达式&tell + 1将地址加20;cout对象认为char的地址是字符串的地址,因此它打印该地址处的字符,直到遇到空字符为止;另一个区别是,对数组运用sizeof运算符得到的是数组的长度,对指针得到的是指针的长度;数组名被解释为其第1个元素的地址,而对数组名应用地址运算符时,得到的是整个数组的地址;在c++中,用引号括起的字符串像数组名一样,也是第一个元素的地址;原创 2023-08-15 17:11:23 · 86 阅读 · 0 评论 -
C++学习第十二天----指针
动态存储,new和delete提供了一种更灵活的方法,它们管理了一个内存池,这在c++中被称为自由存储空间(free store)或堆(heap);c++有3种管理数据内存的方式:自动存储,静态存储和动态存储(有时也叫自由存储空间或堆);,静态存储,是整个程序执行期间都存在的存储方式;使变量成为静态的方式有两种:一种是在函数外面定义它,第二是在声明变量时使用关键字static;,自动存储,在函数内部定义的常规变量使用自动存储空间,被称为自动变量;自动变量通常存储在栈中,后入先出(LIFO);原创 2023-08-17 12:02:57 · 125 阅读 · 0 评论 -
C++学习第三天----转义序列和char类型
4.wchar_t :宽字符类型,可以表示扩展字符集;cin和cout不适用于处理wchar_t类型,有一个类似的工具----wcin和wcout,可以用于处理wchar_t流;可以通过加上前缀L来表示宽字符常量和宽字符串;5.c++新增了char16_t 和 char32_t类型;都为无符号类型,前者长16位,后者长32位;都可以起到换行的作用;\" : 将双引号作为常规字符,而不是字符串分隔符;\a : 表示振铃字符,它可以使终端扬声器振铃;这里不明白的话,可以了解下00F6和00E2各是谁的码点;原创 2023-08-07 17:54:14 · 208 阅读 · 0 评论 -
C++学习第十四天----for循环
答:前缀递增,前缀递减和解除引用运算符的优先级相同,以从右到左的方式进行结合;后缀递增和后缀递减的优先级相同,但比前缀运算符的优先级高,这两个运算符以从左到右的方式进行结合;在所有运算符中,逗号运算符的优先级是最低的,第一个被解释为第二个情况,cats被赋值为17,240将不起作用,第三个则是把240赋值给了cats;看下述代码,第一个虽然使用了缩进,但是循环体只是语句1;如果前面字符串小于后面字符串,返回一个负数;如果前面字符串大于后面字符串,返回一个正数;如果两个字符串相同,该函数返回零;原创 2023-08-19 12:27:46 · 129 阅读 · 0 评论 -
C++学习第五天
在初始化声明中,如果使用关键字auto,而不指定变量的类型,编译器将把变量的类型设置为和初始值相同;数组之所以被称为复合类型,是因为它是使用其他类型来创建的(c语言使用术语“派生类型”,但由于c++对类关系使用术语“派生”,所以它必须创建一个新术语。具体的说,arraysize不能是变量,变量的值是在程序运行时设置的。编译器不会检查使用的下标是否有效,但是如果使用的是无效的,可能破坏数据或代码,也可能导致程序异常终止;初始化数组时,提供的值可以少于数组的元素数目;大括号初始化(列表初始化);原创 2023-08-09 18:12:09 · 145 阅读 · 0 评论 -
C++学习第十一天----指针
二者都是字符串复制的功能;不同的是,strcpy()有两个参数,第一个是目标地址,第二个是要复制的字符串的地址(包括空终止符),这就要求目标地址有足够大的空间进行存放复制的字符串;strncpy()有三个参数,还有第三个参数是要复制的最大字符数,这个最大字符数最大等于(目标内存 - 1),这个1用来存放空终止符,如果超过可能会引起系统崩溃;创建动态结构时,不能将成员运算符句点用于结构名,因为这种结构没有名称,只是知道它的地址;如果要显示的是字符串的地址,则必须将这种指针强制转换为另一种指针类型;原创 2023-08-16 15:53:07 · 78 阅读 · 0 评论 -
C++学习第七天----string类,结构,共用体和枚举
首先要使用string类,程序要包含头文件string;string类位于名称空间std中,所以using编译指令是必须要有的,或者std::string来引用它,不过这比较麻烦;类设计让程序能够自动处理string的大小;可以这么说,把char数组视为一组用于存储一个字符串的char存储单元,而string类变量是一个表示字符串的实体;原创 2023-08-11 12:01:42 · 194 阅读 · 0 评论 -
C++学习第十三天----for循环
它们对操作数的影响是一样的,但是影响的时间不同;就比如对于钱包,清理完草坪付钱和付钱后清理草坪是一样的,最终结果是一样的,但支付钱的时间不同;size()和length()是c++中string类的方法,二者完全等同,作用是返回字符串的真实长度,遇到空字符不会被截断,其中返回的字符串长度不包括空字符;strlen()遇到空字符会被截断,但返回的字符串长度也不包括空字符,是c语言中的计算字符串长度的方法;下面看一个有意思的代码,也许它运行不会出错,但是结果在不同的编译器中一定是千奇百怪的;原创 2023-08-18 17:09:49 · 150 阅读 · 0 评论 -
C++学习第四天
不过,通常float为32位,double为64位,long double 为80,96或者128位;不过对于float,c++只保证6位有效位;ANSI C 版本和C++稍有不同,C++的作用域规则,和c++中可以用const值来声明数组长度;第二,可以使用c++的作用域规则将定义限制在特定的函数或文件中;C++也有3种浮点类型,float,double和long double;将0赋给bool变量时,将被转换为false,非零值将被转换为true;第三,可以将const用于更复杂的类型,如数组和结构;原创 2023-08-08 14:13:36 · 109 阅读 · 0 评论 -
C++学习第二天
char类型是另一种整形,它足够长,能够表示目标计算机中的所有基本符号----所有字母,数字,标点符号等;unsigned long常量----ul(顺序可以调换,大小写也都可以);C++对字符用单引号,对字符串使用双引号;unsigned int常量----U或者u;后缀是放在数字常量后面的字母,用于表示类型;long long ----ll或者LL;char类型,专为存储字符(字母和数字)设计的;long常量----L或者l;控制符:dec----十进制;hex----十六进制;oct----八进制;原创 2023-08-04 18:04:36 · 92 阅读 · 0 评论 -
C++学习第八天----枚举
不管有没有给枚举量赋值,后面的枚举量比前面的枚举量大1;第五,早期版本只能将int值赋值给枚举量,后来这种限制取消了,可以使用long,甚至long long;:找出所定义的枚举量的最小值,如果它不小于0,那么下限就是0;指针名表示的是地址,*运算符被称为间接值或解除引用运算符,将其应用于指针,可以得到该地址处的值;:找出所定义的枚举量的最大值,找到大于这个最大值的,且最小的2的幂,然后减1,就是上限;第二,指定的值必须是整数,但可以只显示地定义其中一部分枚举量的值;第四,可以创建多个值相等的枚举量;原创 2023-08-12 11:59:35 · 158 阅读 · 0 评论 -
C++学习第六天----字符串,按个读取和按行读取
下面举个简单例子,假如你输入了alis dreeb,注意中间有个空格,那么第一次读取只会读到alis就会结束,第二次就会读dreeb;所以上面那种输入,会出现一种bug,第一次读取内容不完整,且第二次cin不会被执行,直接就从缓冲区把dreeb读走了;说明一下,如果把上面两个字符数组打印出来,第一个打印完8个字符之后,还会继续打印,后面打印的东西是未知的,直到遇见\0结束;c-风格字符串具有一种特殊的性质:以空字符结尾,空字符被写作\0,其ASCII码为0,用来标记字符串的结尾;单引号括起来的是字符常量;原创 2023-08-10 16:22:14 · 226 阅读 · 0 评论 -
C++学习第九天----指针
1.声明和初始化指针原创 2023-08-13 19:59:43 · 61 阅读 · 0 评论 -
C++学习第二十七天----创建引用变量
c++给取地址符&赋予一种新的含义,将其用来声明引用。所以在不同的时候要能够区分出来二者的含义。rodents就是引用变量。现在两个变量可以说是完全相同的,指向相同的值和内存单元。例如下,将rodents作为rats变量的别名;原创 2023-09-30 13:25:13 · 59 阅读 · 0 评论 -
C++学习第三十一天----将引用用于类和继承
看一下调用和函数原型,调用传的两个实参,input是string与形参s1是相同类型的,引用指向是没问题的;这就要说到前面提到的临时变量了,所创建的这个临时变量是可以被引用的。,只简单的返回temp可不行,因为函数结束后,它将不复存在,因此该函数的返回类型是string。第一个参数没有使用const,代表可以修改,这个函数也正是使用了这一特点,直接修改了传进来的第一个参数,但是这也是一个副作用,原先的数据被修改了。这就有一个致命的缺陷了,返回了一个局部变量的引用,引用已经释放掉的内存,这是不允许的。原创 2023-10-07 17:15:05 · 74 阅读 · 0 评论 -
C++学习第三十天----将引用用于结构和类
string类定义了一种char* 到string的转换功能,这使得可以使用c-风格字符串来初始化string对象。还有就是const引用的形参的一个属性,前面也讨论过,当类型不匹配时,将自动生成一个临时变量。但是下面这个是没问题的。返回引用时最重要的一点是,应避免返回函数终止时不再存在的内存单元引用。将类对象传递给函数时,c++通常的做法是使用引用。传统的返回机制:返回的是这个值的一个临时副本;返回引用的函数实际上是被引用的变量的别名。返回值为引用时:是直接返回的原本的值。原创 2023-10-05 15:30:29 · 98 阅读 · 0 评论 -
C++学习第三十二天----继承和使用引用参数
上述代码是一个例子,计算望远镜的每个目镜的放大倍数,放大倍数=物镜的焦距/目镜的焦距;setf(ios::showpoint)将对象置于显示小数点的模式,即使小数点部分为0;width(12)设置下一次输出操作使用的字段宽度,只对下一个值有效;setf(ios_base::fixed)将对象置于使用定点表示法的模式;precision(1)指定显示多少位小数,前提是处于定点模式;第二,通过传递引用而不是整个数据对象,可以提高程序的运行速度;第一,程序员能够修改调用函数中的数据对象;引用,指针,按值传递?原创 2023-10-08 15:04:55 · 131 阅读 · 0 评论 -
C++学习第三十三天----默认参数
程序中new了一个新的内存空间用于存放被选择的字符,n+1是为了存放一个空字符。后面的while循环是将余下的空间都填充为空字符,且以空字符结尾。例如left(“hello”, 23231),首先复制字符5个,剩下的都会被填充为空字符。对于使用默认参数只是提供了一个快捷的方式,但并不是必须的,可以根据自己的习惯使用。例如,假如要定义一个函数,该函数返回原始字符串* str的前n个字符,设置参数n默认为1;对于默认参数的设置,必须从右向左逐个进行设置,这一点是很重要的。那么如何设置默认值呢?原创 2023-10-08 17:49:00 · 48 阅读 · 0 评论 -
C++学习第二十八天----引用变量的特别之处
例如,引用变量在声明引用时也要初始化,而不能像指针那样先声明再赋值。这是由于常数和变量不同,按引用传递,引用绑定的是一个变量的别名。c语言只能按值传递,不能使用按引用传递,但是c语言也可以使用按址传递。这里解释一下,假如在代码中使用到rats = bunnies,这并不是将引用变量和变量关联起来了,而是一个赋值语句。希望小伙伴思考过后尝试着运行一下上述代码,你就会发现引用的特别之处,最后x的值也被改变了。按值传递导致被调用函数使用调用程序的值的拷贝;注意:注释的部分就是错误的,就是上述所提到的不同之处。原创 2023-10-03 14:57:33 · 138 阅读 · 0 评论 -
C++学习第二十九天----引用变量和c语言之register关键字
但是即使使用了register关键字修饰变量,也并不总是能够按照你的预期被放入寄存器中,编译器有可能会根据优化的策略以及其他的因素决定。还有就是用register修饰的变量,如果你想获取到它的地址应该是不可能的,这是编译器决定的,无法获取到寄存器的地址。这里说明一下,现在所说的使用&声明的引用称为左值引用,后面还会有&&声明的引用称为右值引用。将引用用于结构和前面所讲到的引用用法基本相似,也是使用引用运算符&。作用是:提示编译器将变量存储在cpu的寄存器中,这样读取写入的效率将变得非常的高。原创 2023-10-04 16:25:27 · 226 阅读 · 0 评论 -
C++学习第二十六天----内联函数与引用变量
引用是已定义的变量的别名(另一种名称,可以理解为外号)。那就要看执行函数代码的时间(也就是上面所说的吃饭)和处理函数调用机制的时间(也就是上面所说的路长)了。代码本身消耗时间并不长,时间主要浪费在了去跳转执行代码的路上,就好像吃饭花了10分钟,来回路上各花了1个小时一样。内联函数就是在每个需要调用的地方复制一个副本一样,所以每调用一次就多一个副本,造成空间的大量使用。内联函数是效率高,但是占用内存。可以举个例子说明内联函数与常规函数的区别:比如我们去吃饭,这是由于宏不是按值传递的,内联函数是按值传递的。原创 2023-09-29 08:50:38 · 140 阅读 · 0 评论 -
C++学习第十五天----while循环和do--whiel循环
注意上述两段代码的区别,分号的作用是结束语句,假如在while()后面加一个分号,那么该while循环的循环体就是空语句,不再是花括号里面的内容;ANSI C和C++库中有一个函数有助于完成这样的工作,这个函数名为clock(),返回程序开始执行后所用的系统时间;下图为运行结果,还是很准确的,2.246/1000 =2.2s,2.2+10=12.2s,结果显示是12.3s。只有在用户按下回车键后,输入的内容才会发送给程序,然后程序在遇到#字符后结束对输入的处理。哨兵字符----将其作为停止标记;原创 2023-08-21 16:50:22 · 173 阅读 · 0 评论 -
C++学习第十六天----循环和文本输入
昨天说到使用cin进行键盘输入的一些弊端,那么怎么解决呢?原创 2023-08-22 15:55:07 · 92 阅读 · 0 评论 -
C++学习第二十三天----函数
前面对于处理数组的方法是:传递多个参数,第一个是指向数组起始处的指针,第二个是数组长度。这种是指定元素区间,传递两个指针,一个指向数组的开头,一个指向数组的尾部。eat+19指向数组的最后一个元素,eat+20指向数组的尾部了;第一,指针指向一个常量对象,这样可以防止使用该指针修改所指向的值;第二,指针本身是常量,这样可以防止改变指针指向的位置。可以了解下c++标准模板库STL所提到的超尾的概念。数组名eat指向数组的第一个元素,就是所说的头部;原创 2023-09-12 17:14:53 · 81 阅读 · 0 评论 -
C++学习第十八天----switch语句
countinue用于循环中,让程序跳过循环体中后面未被执行的代码,开始新的一轮循环,不是结束循环。integer-expression的结果必须是整数值,每个标签必须是整数常量表达式 ,可以是int,char常量,也可以是枚举量。default可以省略,建议switch和break在一起使用,因为运行完一个case,并不会结束程序,而是继续往下执行,不过这也有一个好处,例如;意义是假如1为true,则整个条件表达式的值为2的值,否则为3的值;条件运算符,又叫三元运算符;原创 2023-08-24 17:05:52 · 638 阅读 · 0 评论 -
C++学习第十九天----简单文件输入/输出和今日工作问题
昨天打板归来,我就着手修改代码,初始遇见的问题是通过震动模块,震动触发中断,然后计数,达到一定的值之后就把这个值清0,在正常的模式下,无法实现,但是在睡眠情况下就可以实现,很离谱,睡眠和正常模式代码优先级是一样的,但是就是正常模式下不行,很烦。然后我猜测是不是误检测,因为以前别的地方也出现过误检测,就是多层判断就好了,然后这里我也是这么想的,我就在检测之前加了一个。我的想法是上面多加的那个初始化,这个是外部中断的初始化,是不是中断触发的太频繁引起的卡在中断里,然后我就又把那个加的初始化给屏蔽了,就解决了。原创 2023-08-25 11:24:13 · 127 阅读 · 0 评论 -
C++学习第二十五天----函数指针
1.原创 2023-09-21 16:33:34 · 70 阅读 · 0 评论 -
C++学习第二十四天----函数
函数无法返回一个字符串。原创 2023-09-14 18:21:19 · 75 阅读 · 0 评论 -
C++学习第二十一天----函数
基础的东西在第一天有说明;C++学习第一天----函数_The Kite的博客-CSDN博客对于有返回值的函数,必须要有返回语句;返回值可以是常量,变量和表达式,但不能是数组。假如函数中有多个return,那么函数在遇见第一个的时候结束。在c++中,不指定参数列表时应使用省略号;原型不会将整数转化为结构或指针;在编译阶段进行的原型化被称为静态类型检查。4.函数参数和按值传递。原创 2023-09-08 18:12:22 · 128 阅读 · 0 评论 -
C++学习第十七天----if语句
| == or;标识符and,or 和 not 都是c++保留字,它们不是关键字,它们不是c语言的保留字,但是c语言可以把它们用作运算符,只需要添加头文件iso646.h,c++不用添加头文件。· 逻辑或||,逻辑与&&,逻辑非!逻辑与&&,如果左侧的表达式为false,则右侧将不会再进行判定,结果就为假;逻辑或||,如果左侧的表达式为true,则右侧将不会再进行判定,结果就为真;注:我们可以不特意去记忆运算符的优先级高低,而使用括号,这样不易于出错,提高代码的可读性;原创 2023-08-23 17:40:47 · 95 阅读 · 0 评论 -
C++学习第二十天----简单文件输入/输出
声明一个ofstream对象并将其同文件关联起来后,用于cout的操作和方法(如<< 、endl和setf())都可以用于ofteram对象。方法open()接受一个c-风格字符换作为参数,可以是一个字面字符串,也可以是存在数组中的字符串。必须声明自己的ofstream对象,为其命名,并将其同文件关联起来;运行之后,在程序所在目录下会生成一个一个文本文件;原创 2023-08-26 11:28:36 · 300 阅读 · 0 评论 -
C++学习第二十二天----函数
为将数组类型和元素数量告诉数组处理函数,请通过两个不同的参数来传递它们,如同上面的代码示例;在c++中,当且仅当用于函数头或函数原型中,int *arr 和int arr[ ]的含义相同,都意味着arr是一个int指针。当指针指向数组的第一个元素时,使用数组表示法;当指向一个独立的值时,使用指针表示法。指针(包括数组名)加1,是加上了一个与指针指向的类型的长度(字节为单位);1.将数组地址作为参数可以节省复制整个数组所需的时间和内存。指针表示法:int *arr;打印出来的地址值和数组的长度随系统而异;原创 2023-09-11 17:47:48 · 123 阅读 · 0 评论 -
C++学习第三十五天----函数模板
函数模板是通用的函数描述,即使用泛型来定义函数,其中的泛型可用具体的数据类型(如int,doubel等)替换。如果不考虑向后兼容的问题,并愿意键入较长的单词,则声明类型参数时,使用关键字typename,不使用class;说明一下,在调用模板函数时,编译器会自动生成对应的版本,实际上它只是使程序看起来更简单了,并没有缩短程序。下面程序就是创建了一个交换数值的模板函数,第一次传递的是int类型的,第二次传递的是double类型的;由于类型是用参数表示的,因此模板特性有时也叫做。原创 2023-10-12 15:09:47 · 117 阅读 · 0 评论 -
C++学习第三十四天----函数重载
我们知道c编译器对于重名函数是没办法区分的,是肯定会报错的;那么c++是如何跟踪每一个重载函数呢?那就是因为这个神奇操作----名称修饰(name decoration)或名称矫正(name mangling),它根据函数原型中指定的形参类型对每个函数名进行加密。举个简答的例子;//未经名称修饰的函数原型//经名称修饰加密后?加密过后,转换为了内部表示方法,添加的符号随函数特征标而异,而修饰时使用的约定随编译器而异。原创 2023-10-09 16:33:22 · 73 阅读 · 0 评论