C++基础学习
勿宁
这个作者很懒,什么都没留下…
展开
-
C++学习笔记基础篇35——宽窄字节字符串
宽窄字节为了解决操作系统国际化的问题,微软直接使用一个新的类型:wchar_t,占用2个字节的存储空间。宽窄字节的优缺点:本机操作大部分使用宽字节。如果涉及字符串的网络传输,为了减少传输量,那么就不能全部使用宽字节。复杂的宽窄字节数据类型:● 窄字节:char、char * 、const char *CHAR、(PCHAR、PSTR、LPSTR)、LPCSTR● Unicode 宽字节:wchar_t、wchar_t * 、const wchar_t *WCHAR、(PWCHAR、PW原创 2020-10-12 19:41:13 · 460 阅读 · 0 评论 -
C++学习笔记基础篇34——C++中的字符串string
这部分我觉得主要学会赋值和比较就行,所以没有打一遍,直接拿教程的放上来了。https://www.cctry.com/thread-291921-1-1.html文章目录string的头文件和命名空间:string对象的定义:string字符串的字符相关操作:string字符串的基本信息:string字符串的赋值操作:string字符串的连接:string字符串的比较:string字符串的求子串操作string字符串类的查找操作string字符串类的替换操作string字符串类的插入操作string原创 2020-10-09 21:01:52 · 103 阅读 · 0 评论 -
C++学习笔记基础篇33——C++容器之映射map
map提供的是一种键值对的容器,里面的数据元素都是成对出现的,即:key-value,在知道 key 的情况下能迅速的找到 value,他们是一一对应的关系。map 的使用场景:优点查找起来很快:根据 key 值快速查找记录,查找的复杂度基本是 Log(N),如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。怎么样快吧?所以,当大家以后的工程中有比较多的使用想快速查找的话可以使用map。map的头文件和命名空间:#include <map> //注意,没有原创 2020-10-09 15:53:55 · 226 阅读 · 1 评论 -
C++学习笔记基础篇32——C++容器之链表list
链表特性list 链表呢,本身是链表,所以内存是不连续的,其元素是一个一个的结点在内存中离散的分布。各个结点之间是通过元素内部的指针指过去的,所以对于list来说,如果我想快速的定位到指定的元素,那么他做不到!只能从头到尾的去遍历,通过第1个元素去找第2个元素,通过第2个元素去找第3个元素,以此类推,直到找到你要的元素才行。以上就是list的缺点。优点呢,既然有缺点就应该有优点,优点就是在内部随机的插入元素的时候比较快,因为只需要把插入位置的前后两个节点的指针断开,之后跟新插入的结点连上就可以了,不用大面原创 2020-10-08 11:05:07 · 332 阅读 · 0 评论 -
C++学习笔记基础篇31——C++容器之动态数组vector
定义vector对象的时候先不用指定数组的大小,有数据的话就往数组里面插入就可以了。vector内部自己管理存储空间。vector 的头文件和命名空间:#include <vector> //注意,没有 .h using namespace std; //在 std 标准命名空间中vector 的定义:vector<int> arr_int; //定义了一个内部元素是int的动态数组;vector<char> arr_char; //定义了一个内部元素是ch原创 2020-10-07 15:59:17 · 163 阅读 · 0 评论 -
C++学习笔记基础篇30——文件IO
例子#include <fstream>using namespace std;int main(int argc, char* argv[]){ short var = 20000; ofstream fs; fs.open("d:\\123.txt"); fs << var; fs.close(); ofstream fs2; fs2.open("d:\\456.txt"); fs2.write((cons原创 2020-10-06 15:43:48 · 110 阅读 · 0 评论 -
C++学习笔记基础篇29——多态性与虚函数
虚函数使用基类之指针,指向派生类的对象,调用虚函数的时候,最后调用的是派生类的函数!程序1虚函数使用举例#include <iostream>#include <string>using namespace std;enum EStudentType{ EStudentType_Error = 0, EStudentType_Xiao = 1, EStudentType_Zhong = 2,};class CStudent{public: char *原创 2020-10-05 15:55:30 · 96 阅读 · 0 评论 -
C++学习笔记基础篇28——子类的构造函数与析构函数
1 如果子类没有显示的调用父类的构造函数,那么默认会调用父类无参的构造函数!!!2 如果父类只提供了有参数的构造函数,那么子类在默认情况下调用父类的无参构造函数时就会报错!class CXiaoStudent : public CStudent{public: int yuwen_score; int shuxue_score; int english_score; CXiaoStudent() : CStudent("zhangsan", 'm', 1001, 2原创 2020-10-05 15:26:47 · 247 阅读 · 0 评论 -
C++学习笔记基础篇27——类的继承
父类中的成员在子类中的继承方式,一般也包含三种:public公有继承、private私有继承、protedted受保护继承。public公有继承: 父类的公有成员和受保护成员在子类中保持原有的访问属性,其私有成员仍为父类私有,在子类中是访问不了的,即使通过子类的共有成员函数也访问不了;private私有继承: 父类的公有成员和受保护的成员在子类中变成了私有成员,其私有成员仍为父类私有, 在子类中是访问不了的,即使通过子类的共有成员函数也访问不了;protected受保护继承: 父类的公有成员和原创 2020-10-05 10:34:20 · 161 阅读 · 0 评论 -
C++学习笔记基础篇26——类的静态成员
类的静态成员变量:①、这样所有对象都可以直接访问这个静态成员变量,而且值是一样的;②、静态成员变量在内存中只占用一份存储空间;③、静态成员变量的值对于所有对象来说都是一样的。如果其中一个对象调用函数将其改变了,那么其他成员在访问这个静态成员变量的时候的值都是改变之后的;④、只要在类中定义了类的静态成员变量,那么就占用存储空间了,不管有没有定义这个类的对象,因为静态成员变量不属于任何类对象,而是属于该类;⑤、静态数据成员需要在类外进行声明或声明并初始化,否则在使用的时候会报链接的错误;static原创 2020-10-04 14:40:52 · 513 阅读 · 0 评论 -
C++学习笔记基础篇25——拷贝构造函数&析构函数冲突问题:重载函数&重载命令符
拷贝构造函数依然使用Student作为例子展开,其中CStudent(CStudent& stud) 就是拷贝构造函数,可以实现在使用类去初始话一个对象时,用同一个类的另外一个对象初始化。class CStudent{public: char *p_name; char sex; int num; int age; CStudent(){}; CStudent(char* pname, char t_sex, int t_num, int t_age) :sex(t_sex),原创 2020-10-04 14:02:34 · 494 阅读 · 1 评论 -
C++学习笔记基础篇24——类的构造函数与析构函数
构造函数class CStudent{public: char name[50]; char sex; int num; int age; CStudent(char* pname, char t_sex, int t_num, int t_age): sex(t_sex), num(t_num), age(t_age){ };};析构函数析构函数不是用来删除对象的,而是当对象被删除的时候自动会被调用的,用来做一些对象被删除之前的清理工作。只要对象的生命周期结束,那么程序就会自动执原创 2020-10-03 17:31:46 · 99 阅读 · 0 评论 -
C++学习笔记基础篇24——函数重载与默认参数
什么是函数重载函数重载就是为了实现同一个函数对于不同类型,个数或者顺序的输入参数都可以正常的运行。重载函数的参数个数、参数类型、参数顺序 三者中必须至少有一种不同(不然会产生调用疑惑)。函数的返回值类型可以相同也可以不同。上述对于函数重载的要求,我们可以举一个反面例子。比如下面的int max_num(int a, int b); 和 bool max_num(int a, int b); 只有返回值类型不同。这样会导致系统不知道调用哪一个。编译直接报错。int max_num(int a, i原创 2020-10-03 16:27:42 · 90 阅读 · 0 评论 -
C++学习笔记基础篇23——类的构造函数
构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来主动调用它,构造函数会在对象被建立时自动被调用的。作用就是用来处理对象的初始化操作。构造函数的注意事项:构造函数的名字必须与类名同名,不能随意命名,这样的话才能让编译器认为该函数是构造函数,而不是类的普通成员函数;构造函数不具有任何类型,不返回任何值,连 void 都不是;构造函数不需要用户调用,也不应该被用户调用,它是对象建立的时候自动被系统调用,用来初始化刚刚建立的对象的;如果用户没有定义自己的类的构造函数,那么系统会自动生成.原创 2020-10-02 17:21:11 · 190 阅读 · 0 评论 -
C++学习笔记基础篇22——this指针
this指针就是类的函数中区分多个对象共用的成员函数。例子1#include <iostream>#include <string>using namespace std;class Student{public: char name[50]; int num; int age;public: void set_age(int age) { this-> age= age; };};int main() { Student stud原创 2020-10-02 16:57:46 · 75 阅读 · 0 评论 -
C++学习笔记基础篇21——结构体和类的字节对齐规则
为什么要进行字节对齐?《Windows核心编程》里这样说:当CPU访问正确对齐的数据时,它的运行效率最高,当数据大小的数据模数的内存地址是0时,数据是对齐的。例如:WORD值应该是总是从被2除尽的地址开始,而DWORD值应该总是从被4除尽的地址开始,数据对齐不是内存结构的一部分,而是CPU结构的一部分。当CPU试图读取的数值没有正确的对齐时,CPU可以执行两种操作之一:产生一个异常条件;执行多次对齐的内存访问,以便读取完整的未对齐数据,若多次执行内存访问,应用程序的运行速度就会慢。字节对齐实验理解定义原创 2020-10-02 16:42:04 · 162 阅读 · 0 评论 -
C++学习笔记基础篇20——类的声明&成员函数
教程中说了一大堆,不如直接上程序简单明了。class Student{public: string name; int num; int age;private: char sex; int max_num(int x, int y) { return x > y ? x : y; }public: int get_max_num(int a, int b, int c) { int原创 2020-10-02 10:58:22 · 404 阅读 · 0 评论 -
C++学习笔记基础篇19——引用及new和delete的使用
引用1 变量的引用就是一个变量的别名,变量和变量的引用代表着同一个变量2 紧跟在数据类型后面的&符号就是引用的声明符号,其他情况都可以认为是取地址符号。 int a = 3; int& b = a; //正确 int& c = b; //正确 int* p = &b; //正确,得到的是变量a的地址 *p = 5; c = 6;可以逐语句调试上述代码,看看a,b,c,p,*p,&b值的变化。new和delete动态分配内存int* p =原创 2020-09-30 20:17:48 · 193 阅读 · 0 评论 -
C++学习笔记基础篇18——枚举类型&typedef
枚举类型的声明:声明枚举类型用 enum 开头,例如:enum ESex { ESex_Male, //男性 ESex_FMale //女性};以上就是定义了一个枚举类型 ESex,大括号内部的 ESex_Male、ESex_FMale 称为枚举元素或枚举常量。表示这个枚举类型可能的值。特点:枚举元素按常量处理,所以称作枚举常量。枚举元素有默认的值,但也可以在声明的时候指定值。enum EWeekDay { EWeekDay_1原创 2020-09-30 13:01:28 · 347 阅读 · 0 评论 -
C++学习笔记基础篇17——结构体数组和指针
小作业:①、根据运算符的优先级,大家想一下:Student stu[2] ={ { "aaa", 0, 'f', 10 }, { "bbb", 0, 'm', 12 }};Student* pstu = stu;++pstu->num = 202; //这句代码执行之后,到底是stu[0] 的 num 值变化了,还是 stu[1] 的 num 值变化了?答:++的优先级低于->,所以等于先对stu[0]进行赋值,然后对pstu指针指向下一个数组原创 2020-09-27 15:28:07 · 384 阅读 · 0 评论 -
C++学习笔记基础篇16——数值和指针
数组的名字是数组的首地址,可以把他理解为一个指针,但是这个指针是:int * const 类型的,也就是说不能改变其指向的地址。也就是说不能动是固定的。那怎么办呢,不是白费了吗?没关系,我们可以再定义一个指针,如下:int num[100] = {0};int* pnum = num;这里的 pnum 是可以移动的,所以就可以指向数组num中的任意一个元素喽!例如遍历一个数组:int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int* pnum = num原创 2020-09-26 14:28:00 · 199 阅读 · 0 评论 -
C++学习笔记基础篇15——地址和指针
之前每次看C++都是在这部分内容中学的迷迷糊糊,今天突然觉的好像有点懂了。1、什么是地址?我们在程序中定义的任何变量实际上都是存在内存中的,对吧?那么既然是存在的东西就应该有装他的地方。举个例子,小明家,肯定有小明家的地址,张三家也应该有张三家的地址。再来说一个,比如说谁家都有电视机,对吧,那么我问你电视机在哪里?你肯定会说在客厅的墙上挂着,不管在哪,电视机肯定在他的位置摆放着呢,换句话说电视机也有他自己的地址。所以变量的地址也是一个意思,就是这个变量真正存在哪,在哪里!这就是变量的地址。下面我们用原创 2020-09-26 11:13:20 · 1493 阅读 · 0 评论 -
C++学习笔记基础篇14——数组
定义:类型名 数组名[常量表达式];访问:数组名[元素下标];(从0开始)字符数组的定义:char szbuf[10] = "hello";字符数组与字符串的区别:区别就是字符串比字符数组多了一个结束标志的字符:’\0’,这个字符的ASCII码就是0,所以作为一个字符串来说,其有效字符就是结束标志\0之前的字符。string提供了很多对字符串进行操作的函数#include <string> //C++语法字符串连接函数:strcat字符串拷贝函数:strcpy字符串原创 2020-09-24 20:25:32 · 86 阅读 · 0 评论 -
C++学习笔记基础篇13——多文件共同访问一个全局变量
多文件共同访问一个全局变量:①、在其中一个C/Cpp文件中定义并初始化全局变量,例如:int sum = 0;②、在C/Cpp文件都能访问到的一个h头文件中声明该全局变量为支持多文件访问的:extern int sum; //此时只是声明,所以不需要初始化③、在其他C/Cpp文件中 #include 这个头文件之后,就可以直接使用这个全局变量 sum 了。备注:不能在 h 文件中直接定义这个全局变量 int sum = 0; 之前看到很多网友都是这么做的,这样的话如果有多个C/Cpp文件 inc原创 2020-09-24 10:00:53 · 524 阅读 · 0 评论 -
C++学习笔记基础篇12——函数
前面已经学完了最基础的一些语法,现在就开始进入函数的学习。定义函数的形式:返回类型 函数名(形式参数表列){声明部分;执行语句;}形参实参:定义函数括号中的就是形参,调用函数时的是实参举例:#include <iostream>using namespace std;int add(int x, int y){ return x + y;}int main(){ int a = 2, b = 5; int sum原创 2020-08-29 23:26:45 · 59 阅读 · 0 评论 -
C++学习笔记基础篇11——水仙花数
题目1:水仙花数输出所有的“水仙花数”,什么是水仙花数呢?所谓的水仙花数就是指一个3位数,其各个位数字的立方和等于该数本身。立方大家都知道吧,比如2的立方就是 2x2x2=8。例如:153就是一个水仙花数在这里插入代码片题目2:打印星号图案输出以下图案:*************************...原创 2020-08-24 23:42:17 · 292 阅读 · 0 评论 -
C++学习笔记基础篇10——for循环
10几天没写博客了,检讨反思,今天继续for循环仍然是很常见的,这里留个例子就行for循环举例#include <iostream>using namespace std;int main(){ int x = 1, sum = 0; for (int x = 1; x <= 100; ++x) { sum += x; } cout << "1~100原创 2020-08-20 21:34:58 · 167 阅读 · 0 评论 -
C++学习笔记基础篇9——while 循环
while语句简单的语句还是直接上例子#include <iostream>using namespace std;int main(){ int x = 1, sum = 0; while (x <= 100) { sum += x; ++x; } cout << "1~100的累加和 = " << sum原创 2020-08-20 21:27:11 · 128 阅读 · 0 评论 -
C++学习笔记基础篇8——switch语句实现多分支选择结构
废话不多说直接上代码,还是上一讲例子键盘输入0-6之间的整数,分别打印出代表每周的星期日、星期一、…、星期六,请使用switch语句来实现。同时,如果是周六和周日的话要打印出“今天是周末”的字符串。#include <iostream>using namespace std;int main(){ cout << "请输入一个数字:" << endl; int num = 0; cin >> num原创 2020-08-07 23:25:23 · 601 阅读 · 0 评论 -
C++学习笔记基础篇7——冒号表达式
冒号表达式的规则:表达式1 ? 表达式2 : 表达式3若表达式1为真,则返回表达式2的值,若表达式1为假,则返回表达式3的值举例:max = x > y ? x : y;原创 2020-08-07 21:14:33 · 1757 阅读 · 0 评论 -
C++学习笔记基础篇6——if语句
if是最常见的判断语句,我们直接上例子 根据用户输入的数字:1-7,输出今天是星期几?输入1输出星期一,输入2输出星期二,以此类推。#include <iostream>using namespace std;int main(){ int num = 0; cout << "请输入1-7" << "\n"; cin >> num; if (num = 1) { cout << "星期一 " << "\n";原创 2020-08-07 17:06:02 · 831 阅读 · 0 评论 -
C++学习笔记基础篇5——输入输出
输入输出C++中进行打印输出一般是用输入与输出流库中的 cin 和 cout 来实现的。 cin 和 cout 的定义是在 iostream中,命名空间为 std,所以如果我们的程序中要使用 cin 和 cout 就必须要加上以下两条语句:#include <iostream> using namespace std;C语言中的输入与输出函数在C++仍然可以使用getchar:字符输入函数putchar:字符输出函数scanf:输入printf:输出printf原创 2020-08-07 16:41:18 · 143 阅读 · 0 评论 -
C++学习笔记基础篇4——赋值运算符和赋值表达式
赋值运算符:精度的丢失取值范围的越界逗号表达式:所有以逗号间隔的表达式都进行计算,各个表达式的计算顺序按照从左往右。整个表达式的值是最后一个逗号表达式的值优先级原创 2020-08-07 13:50:31 · 139 阅读 · 0 评论 -
C++学习笔记基础篇3——运算符
常用运算符归类■ 算术运算符:+(加)、-(减)、*(乘)、/(除)、%(整除求余)、++(自加)、–(自减)■ 关系运算符:<(小于)、>(大于)、==(等于)、>=(大于或等于)、<=(小于或等于)、!=(不等于)■ 逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非)■ 位运算符:<<(按位左移)、>>(按位右移)、&(按位与)、|(按位或)、^(按位异或)、~(按位取反)■ 赋值运算符:(=号及其扩展赋值运原创 2020-08-05 16:42:42 · 230 阅读 · 0 评论 -
C++学习笔记基础篇2——数据类型,常量,变量
数据元( Data Element),也称为数据元素,是用一组属性描述其定义、标识、表示和允许值的数据单元,在一定语境下,通常用于构建一个语义正确、独立且无歧义的特定概念语义的信息单元。数据元可以理解为数据的基本单元。数据元的类型即为数据类型。按是否可变将数据可以分为变量和常量。数据类型数据类型分类如下图所示:目前对枚举,共用体和类类型还没有接触过,以后碰到了再深入研究一下。下图为对应取值范围和长度,感觉实际使用时还是以int和float和char为主,碰到特殊情况,可以再来查表。常量常原创 2020-08-05 15:18:46 · 152 阅读 · 0 评论 -
C++学习笔记基础篇1——第一课hello world
@C++学习笔记基础篇——第一课hello worldC++学习笔记基础篇——第一课hello world写在前面本科期间对于python和C++的学习是要用啥学啥,学的比较杂,这个暑假比较空,将C++的基础重新过一遍,并以博客作为记录。例程#include <iostream> //包含系统的头文件using namespace std; //命名空间int main(){ cout << "Hello World!" <<原创 2020-08-05 13:38:12 · 190 阅读 · 0 评论