
C/C++学习笔记
文章平均质量分 80
分享C/C++学习笔记
微尘8
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++条件编译指令:#if、#elif、#ifdef、#ifndef、#elifdef、#elifndef、#else、#endif
预处理指令控制预处理器的行为。编译器将源代码生成目标程序时,预处理器在编译前的翻译阶段4执行,预处理的结果会生成单个文件,这个文件会传递给实际的编译器。 条件编译指令用于控制预处理器根据条件判断决定是否编译某段代码。这一行为由 #if、#elif、#ifdef、#ifndef、#elifdef (C++23起) 、#elifndef (C++23起)、#else、和 #endif 预处理指令控制。原创 2024-11-25 18:26:24 · 3154 阅读 · 0 评论 -
C++ASCII码表和字符操作
ASCII (American Standard Code for Information Interchange),美国信息交换标准代码,就是一种字符编码,用于将文本字符和控制字符与数字进行映射。大写字母 A ~ Z 的ASCII码 65 ~ 90,小写字母 a ~ z 的ASCII码 97 ~ 122,大写字母比小写字母的ASCII码小 32 (0b00100000,0x20),数字字符 0 ~ 9 的 ASCII码 48 ~ 57,字符串的终止符为 '\0',ASCII 码为 0。原创 2024-11-23 23:35:33 · 2840 阅读 · 0 评论 -
C++注释
注释是源代码内的文本内容,目的是方便人们根据注释阅读源代码。注释不会被编译到目标程序中,因为编译器将源代码生成目标程序时,每段注释都会被替换为单个空白字符从程序中移除。多行注释/* */,单行注释 //原创 2024-11-23 20:01:40 · 1519 阅读 · 0 评论 -
C++面向对象编程之七:重载操作符(++,--,[],->,())
重载操作符为全局函数时,应该将全局函数设置为类的友元(friend)。必要时应该重载赋值操作符=,避免两个对象内部的指针指向同一片内存空间,导致出现悬垂指针的问题。重载操作符操作符的本质是重载函数,例如:重载操作符为类的成员函数时,本质是调用了该类的成员函数。例如:MyInt c = a + b; //本质是:MyInt c = a.operator+(b);不能的重载的操作符有:.、::、.*、->*、?=、sizeof、#。必须重载为类的成员函数的操作符有:=、[]、->、()原创 2023-03-13 16:55:59 · 298 阅读 · 0 评论 -
C++bool,char,int,long,float,double取值范围以及存储形式
C++基本数据类型包括bool、char、int、long、float、double、long double等。数据在计算机内存中是以补码的形式存储的。机器数就是数据在计算机中的二进制表示形式。机器数是带符号的,在计算机中用二进制数的最高位存放符号, 正数为0, 负数为1。原码就是机器数,即用最高位存放符号, 正数为0, 负数为1。, 其余位表示值。正数的反码就是它的原码,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。正数的补码就是它的原码,负数的补码是它的反码加1。原创 2023-03-23 21:00:57 · 1633 阅读 · 0 评论 -
C++模板
C++模板分为函数模板和类模板。函数模板代表了一个函数家族,该函数模板与数据类型无关,当使用到函数模板时,会去调用特定版本的模板函数。类模板代表了一个类家族,该类模板与数据类型无关。程序在编译阶段,编译器会根据指定的模板数据类型生成特定版本的模板类,程序在运行的过程中,使用到类模板的地方,就会去调用特定版本的模板类中相对应的函数。使用C++模板可编写与数据类型无关的通用代码,提高代码复用率,可维护性。C++标准模板库(STL)主要就是运用了C++模板技术来实现。原创 2023-03-23 13:36:33 · 699 阅读 · 0 评论 -
C++多态
在计算机的编程语言中,多态指的是为不同数据类型的实体提供统一的接口。C++多态:父类的成员函数声明为虚函数或纯虚函数,子类重写父类的虚函数或纯虚函数,在使用时,让子类的对象指向父类的引用或指针,从而实现运行时多态。动态多态函数地址是晚绑定,运行阶段确定函数地址。含有纯虚函数的类称为抽象类。在C++中使用多态时,如果在堆区new子类对象指向父类指针,那么父类指针在释放时,是调用不到子类的析构函数的,为了解决这个问题,需要把父类的析构函数定义为虚析构函数或纯虚析构函数。原创 2023-03-18 23:07:35 · 319 阅读 · 0 评论 -
C++程序在内存中的模型
C++程序在内存中的模型:从地地址到高地址为,用户空间:受保护区,代码区(.text段),只读数据段(.rodata段),数据段(.data段),未初始化数据段(.bss段),堆区(heap),共享库,栈区(stack),内核空间:不允许用户层直接访问的。Linux 64位系统,理论上,64bit内存地址可用空间为:0x0000000000000000 ~ 0xFFFFFFFFFFFFFFFF。Linux 64位操作系统仅使用了低地址的47位,高地址的17位。原创 2023-03-17 14:28:46 · 1330 阅读 · 2 评论 -
C++面向对象编程之八:继承
在C++中,把事物共有属性或方法放在父类,把事物特有的属性或方法放在子类,子类继承父类的属性或方法,从而达到少写重复的代码,提高代码的简洁性,可读性等,这样的编程思想,就叫做继承。继承语法:class 子类名:继承方式 父类名,这个被其它类继承的类叫父类(或基类)。继承了其他类的类叫做子类(派生类)。子类继承于父类,子类会把父类所有的非静态成员变量都继承(包括父类的private非静态成员变量)过来,只是父类的private非静态成员变量编译器做了限制,子类不可以访问。原创 2023-03-14 01:49:25 · 248 阅读 · 0 评论 -
C++面向对象编程之六:重载操作符(<<,>>,+,+=,==,!=,=)
C++允许我们重新定义操作符(例如:+,-,*,/)等,使其对于我们自定义的类类型对象,也能像内置数据类型(例如:int,float,double)等一样直观,可以进行加,减,乘,除,比较大小等等操作。重载操作符本质是函数,只是这个函数的函数名比较特别,为:operator后接需要重新定义的操作符的符号。例如,重载+号,函数名为:operator+;重载-号,函数名:operator-。因为重载操作符本质是函数,所以实际上就是为某个自定义的数据类类型或枚举类型实现函数重载。原创 2023-03-10 21:55:03 · 5601 阅读 · 0 评论 -
C++面向对象编程之五:友元(friend)
C++中,允许一个类的非共有成员被这个类授予友元关系的全局函数,另一个类,或另一个类中的成员函数访问。友元不是一个类中的成员,所以它们不受声明出现部分的访问权限(public,protected,private)影响。友元函数是在类中用关键字friend修饰的非成员函数。友元函数可以是一个普通的函数,也可以是其他类的成员函数。虽然它不是本类的成员函数,但是在它的函数体中可以通过对象名访问类的私有和保护成员。友元类是在类中用关键字friend修饰的另一个类的声明。原创 2023-03-09 20:54:44 · 816 阅读 · 0 评论 -
C++面向对象编程之四:成员变量和成员函数分开存储、this指针、const修饰成员和对象
在C++中,成员变量和成员函数是分开存储的,只有非静态成员变量才存储在类中或类的对象上。通过该类创建的所有对象都共享同一个函数。在C++中,空类占用内存大小为一个字节。this指针隐含在每一个非静态成员函数内,每一个非静态成员函数都隐含有一个this指针。当对象调用非静态成员函数时,this指针指向该对象。const成员函数(常函数)不能修改普通的成员属性,但常量成员函数(常函数)可以对有mutable修饰的成员属性进行修改。const修饰的对象叫常对象,常对象只能调用常函数。原创 2023-03-09 14:36:05 · 803 阅读 · 2 评论 -
C++面向对象编程之三:初始化列表、类对象作为类成员、静态成员
C++提供了初始化列表语法,可以用于成员属性初始化。C++中的另一个类的对象可以作为类的成员,我们称为该成员为对象成员。那么这时是先构造对象成员,后构造该类,析构函数刚好相反,先析构该类,后析构对象成员。静态成员变量:就是在成员变量前加上关键词static修饰的,static成员变量,所有对象共享一份数据,在编译阶段分配内存,类内声明,类外初始化,static成员变量也是有访问权限的。静态成员函数:就是在成员函数前加上关键字static修饰,静态成员函数的函数体内只能访问静态成员变量和静态成员函数原创 2023-03-08 20:25:46 · 587 阅读 · 0 评论 -
C++面向对象编程之二:构造函数、拷贝构造函数、析构函数
C++利用构造函数和析构函数,完成对象的初始化和清理工作。对象的初始化和清理工作,是编译器强制我们要做的事情,如果我们不提供构造函数和析构函数,编译器会提供3个函数:1. 默认无参构造函数。2. 默认拷贝构造函数。3. 默认析构函数。构造函数:在对象初始化时,对对象的成员属性赋初始值。构造函数由编译器自动调用,不用手动调用。拷贝构造函数:在对象初始化时,将一个已有的对象的所有成员属性拷贝到这个被创建的对象上。拷贝构造函数由编译器自动调用,不用手动调用。析构函数:在对象销毁前系统自动调用,执行一些清理工作原创 2023-03-08 14:04:28 · 1193 阅读 · 0 评论 -
C++面向对象编程之一:封装
C++面向对象编程三大特性为:封装,继承,多态。C++认为万事万物皆为对象,对象有属性和行为。具有相同属性和行为的对象,我们可以抽象称为类。将具有相同属性和行为的对象,抽象为类,并对属性和行为加以权限控制,来表现事物,我们称为封装。在设计类的时候,可以把属性和行为放在不同的权限下,控制属性和行为的访问权限。访问权限有三种:public权限:类内可访问,类外也可访问,子类可访问;protected权限:类内可访问,类外不可访问,子类可访问;private权限:类内可访问,类外不可访问,子类不可访问。原创 2023-03-07 16:03:52 · 804 阅读 · 0 评论 -
C++引用
1.引用(reference)就是它绑定的对象的别名(另一个名字)。在实际的程序开发中,引用主要用作函数的形式参数。2.引用的定义:数据类型 &别名 = 原名; 3.引用作为函数的形参,实际上形参是实参的一个别名,所以引用传递,在函数体内对形参的修改,实际上是对实参的修改。原创 2023-03-04 22:11:10 · 480 阅读 · 0 评论 -
空指针,野指针
在C/C++中,空指针(null pointer)是指向内存地址0的指针变量。野指针(wild point)是指向的内存地址空间是未知的,不确定的指针。也就是这个指针存放的内存地址是不合法的,我们对其进行操作,可能会出现严重的后果。原创 2023-03-03 13:04:22 · 1981 阅读 · 0 评论 -
C++科学计数法
C++的数字用科学计数法表示。原创 2022-12-12 19:38:40 · 8691 阅读 · 0 评论 -
printf 格式化输出符号详细说明
%a 浮点数、十六进制数字和p-记数法(C99)%A 浮点数、十六进制数字和p-记法(C99)%c 一个字符(char)%C 一个ISO宽字符%d 有符号十进制整数(int)(%ld、%Ld:长整型数据(long),%hd:输出短整形。) %e 浮点数、e-记数法%E 浮点数、E-记数法转载 2015-08-26 15:15:22 · 942 阅读 · 0 评论 -
常量指针与指针常量
(1)常量指针,表示指针指向的地址的内容不可改变(2)指针常量,表示指针指向的地址不可改变,必须声明时进行初始化#include #include int main(int argc, char *argv[]) { // 常量指针,表示指针指向的地址的内容不可改变 const int a = 1; const int *pa = &a; int b = 2; const原创 2015-08-25 21:06:06 · 413 阅读 · 0 评论