C++教程从入门到实战(c++基础入门,看这一篇就够了)

news2024/12/28 19:13:35

1. 安装

g++编译器

是编译C++代码使用的编译器,不要使用gcc了。

在用户目录中单独创建一个文件夹存放下载后的3个安装文件,然后进入到目录中执行下面命令

cd 文件夹

sudo dpkg -i *.deb 本地安装

sudo apt-get install g++ 在线安装

2. C++的语言特点及优势

c with class(类)

c plus plus

大型的软件项目,要使用面向对象的思想编程。但是C语言的语法是面向过程的。

现有面向对象的思想,后有面向对象的语言。

C++实现了面向对象程序设计;

在高级语言当中,处理运行速度是最快的。

C++语言非常灵活,功能非常强大。如果说C语言的优点是指针,那么C++的优点就是性能和类层次结构的设计。

C++非常严谨、精确和数理化,标准定义很细致。

C++语言的语法思路层次分明、相呼应;语法结构是显式的、明确的。

3 .简介

1 C++的含义

c with class

c plus plus 简称c++

2 文件后缀

.cpp

3 编译命令

g++ test.cpp -o test

4 C++的标准库头文件没有.h

5 C++兼容C语言中的头文件

stdio.h在c++中也能使用,c++建议把stdio.h写成

stdio.h --- cstdio

stdlib.h --- cstdlib

string.h --- cstring

4. c++与c区别:

例如五子棋游戏:

面向过程的设计思路:

① 开始游戏

② 黑子先走

③ 绘制画面

④ 判断输赢

⑤ 轮到白子

⑥ 绘制画面

⑦ 判断输赢

⑧ 返回步骤2

⑨ 输出最后结果

面向对象的设计思路:整个五子棋可以分为 :

① 玩家系统,黑白双方,这两方的行为是一模一样的

② 棋盘系统,负责绘制画面

③ 规则系统,负责判定诸如犯规、输赢等。

第一类对象(玩家对象)负责接受用户输入,

并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,

同时利用第三类对象(规则系统)来对棋局进行判定。

总结:

1) 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,

使用的时候一个一个依次调用就可以了。

2) 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,

而是为了描叙某个事物在整个解决问题的步骤中的行为 。

二、标准输入输出

1. 第一个c++程序

输出:hello world

示例1:

#include <iostream>
//io输入输出  stream流
//std::cout  输出流对象  对象在面向对象语言中指的是类的一个实例,就是用类定义的变量。
//std::是cout的命名空间
// << 运算符重载,后面会学的语法。 在这里是将<<的右值给左值,在这里是使用输出流对象输出字符串。
// << 继续给cout输出  std::endl; 换行符  end line
//C++的main返回值必须是int
int main()
{
    std::cout<<" hello world !"<<std::endl;
    return 0;
}

编译:g++ test.cpp -o test

运行:./test

2. 输出流对象

输出流对象可以自动识别基本类型的输出类型

std::cout

对象?

示例2:

#include <iostream>
​
int main()
{
    int a = 10; 
    char c = 'q';
    std::cout<<a<<" "<<c<<std::endl;//10 q  自动识别要输出变量的类型
    return 0;
}

练习1:

使用for循环输出10个整数 0~9

改进优化:

在C++中for循环的表达式1可以定义变量,变量的作用域是表达式1、

表达式2、表达式3和循环体,生命周期是整个for循环的过程

# include <iostream>
int main()
{   
    //如果for循环结束后还想要使用i,那么i就不能定义在表达式1里面
    for(int i = 0;i < 10;i++)   
    {       
        std::cout<<i<<" ";  
    }   
    std::cout<<std::endl;
    return 0;
}

3. 输入流对象

输入流对象可以自动识别基本类型的数据类型

std::cin

示例3:

#include <iostream>
​
int main()
{
    int age;
    std::cout<<"please input age:"<<std::endl;
    std::cin>>age;//从输入流获得一个整数存放到age变量中,cin会根据变量类型自动识别要输入的数据类型。
    std::cout<<age<<std::endl; 
    //<<  >>都指向了数据流的方向
}

练习2:

输入一个字符 如果是大写 则转为小写 如果是小写则转为大写

#include <iostream>
​
int main()
{
    while(1)
    {
        char c;
        std::cin>>c;
        if(c>='A' && c<='Z')
        {
            c+=32;
        }
        else if(c>='a' && c<='z')
        {
            c-=32;
        }
        std::cout<<c<<std::endl;
    }
    return 0;
}
   
   

4. cin同时获取多个值

示例4:

#include<iostream>
​
int main()
{
    std::cout<<"请输入一个age"<<std::endl;
    int age;
    char f;
    std::cin>>age>>f;//age的数据需要先输入
    std::cout<<"my age is"<<age<<" "<<f<<std::endl;
    return 0;
}

std::cout

std::cin

都是C++给我们定义好的对象。

三、命名空间

1.使用命名空间的目的

避免同名冲突, 学名:避免命名空间污染

注意:C++语言只有一个命名空间std,C++定义的所有的类和对象都是std这个命名空间下的命名的

C++的标准库都是在std命名空间中定义的

2.命名空间的表示方法

(1)方法1

最常见的用法

使用时 加上 using namespace std;就可以

示例5:

#include <iostream>
​
using namespace std;//声明下面的代码都使用std命名空间
​
int main()
{
    char c;
    cin>>c;//前面不用加std::
    if(c>='a'&&c<='z')
    {
        c -= 32;
    }
    else if(c>='A'&&c<='Z')
    {
        c += 32;
    }
    cout<<c<<endl;
}
   
   

C++只给我们提供了一个命名空间std。

练习3:

使用命名空间的方式,输入年龄age,输出:“my age is "age;

#include <iostream>
​
using namespace std;
​
int main()
{
    int age;
    cin>>age;
    cout<<"my age is "<<age<<endl;
    return 0;
}

(2)方法2

最不常见的用法

示例6:

#include<iostream>
//把使用到的内容单独进行声明
using std::cout;
using std::cin;
using std::endl;
int main()
{
	cout<<"hello world!"<<"my god";
	cout<<"come on baby!"<<endl;
	char name[20];
	cout<<"please input name:";
	cin>>name;
	cout<<"name:"<<name<<endl;
	return 0;
}

(3)方法3

示例7:

迫于无奈

当两个命名空间中有相同的标识符时,在使用这个标识符的时候必须把命名空间写在前面!

假设有一个叫mystd的命名空间里也有一个cout

std::cout

mystd::cout

#include<iostream>

using namespace std;
using namespace mystd;

int main()
{
std::cout<<“hello world!”<<“my god”;
std::cout<<“come on baby!”<<std::endl;
char name[20];
std::cout<<“please input name:”;
cin>>name;
std::cout<<“name:”<<name<<std::endl;
return 0;
}

3.自己写命名空间

示例8:

自定义命名空间teacher

#include<iostream>

using namespace std;
//namespace定义命名空间的关键字,teacher是定义的命名空间的名字
namespace teacher
{
//在命名空间里定义
char name[20] = “小明”;
//命名空间内部可以定义任何内容
}

//using namespace teacher;

int main()
{
//因为name是定义在teacher命名空间里,所以要么先声明使用teacher命名空间,要么在name前面加上teacher::
cout<<teacher::name<<endl;
return 0;
}

示例9:

定义命名空间teacher和worker

#include<iostream>

using namespace std;

//定义命名空间teacher
namespace teacher
{
char name[20] = “大神”;
int age = 15;
}
//定义命名空间worker
namespace worker
{
char name[20] = “大爷”;
int wight = 180;
}
//两个命名空间都有name

using namespace teacher;
using namespace worker;

int main()
{
cout<<teacher::name<<endl; //因为teacher和worker都有name,所以这里必须写命名空间
cout<<age<<endl; //因为只有teacher里有age,所以这里使用的是teacher里的age
}

如果想深造推荐书 C++primer第五版,不要通篇的读,要当做字典看。

注意不是C++ primer plus

练习4:

分别在teacher和worker命名空间中添加函数showName()来输出name

main中,调用两个函数showName();

#include <iostream>

using namespace std;

namespace teacher
{
char name[] = “大神”;
int age = 18;
void showName()
{
cout<<name<<endl;//优先选择同一个命名空间的成员
}
}

namespace worker
{
char name[] = “大爷”;
int wight = 180;
void showName()
{
cout<<name<<endl;
}
}

using namespace teacher;
using namespace worker;

int main()
{
teacher::showName();
worker::showName();
return 0;
}

思考:两个命名空间里的成员是不是全局变量?是全局变量!

4.匿名命名空间

示例10:

当定义全局变量,不指定命名空间时,C++会默认将全局变量放在匿名命名空间中

#include <iostream>

using namespace std;

int a = 10;//没有指定命名空间的全局变量

int main()
{
int a = 20;//定义局部变量a
cout<<::a<<endl;//::a是使用匿名命名空间的全局变量a
return 0;
}

:: 域

命名空间的作用只在起名上

自定义名字空间:

(1)名字空间::name

(2)内部优先

(3)全局变量,会默认放在匿名命名空间中

四、bool类型

bool是基本数据类型(内置类型,不需要声明就能使用的类型),用来表示逻辑真假。

C++依然可以使用0和非0表示真假,C++增加bool类型专门表示真假true false

真假: 非0为真(true) 0是假(false)

bool类型能够增强程序可读性

int empty();

bool empty();

示例11:

#include<iostream>

using namespace std;

int main()
{
bool b1;
b1 = 10;
//正常情况下输出bool类型的值就是0 1
cout<<b1<<endl;
bool b2;
b2 = -23;
cout<<b2<<endl;
bool b5;
b5 = 0;
cout<<b5<<endl;
bool b3;
b3 = true;
cout<<b3<<endl;
bool b4;
b4 = false;
cout<<b4<<endl;
cout<<sizeof(b4)<<endl; //1字节
//bool 类型有多大?
//A 1字节
//B 2字节
//C 至多1字节
}

示例12:

#include<iostream>

using namespace std;

int main()
{
bool gender = true;
bool sex = false;

cout&lt;&lt;(gender?"帅哥":"美女")&lt;&lt;endl;
cout&lt;&lt;(sex?"帅哥":"美女")&lt;&lt;endl;  

cout&lt;&lt;"gender"&lt;&lt;boolalpha&lt;&lt;gender&lt;&lt;endl;//boolalpha输出true和false,需要在除数bool变量之前加  输出 true
cout&lt;&lt;"sex:"&lt;&lt;sex&lt;&lt;endl;   //false     
bool c = true;	
cout &lt;&lt; "c = " &lt;&lt;noboolalpha&lt;&lt; c &lt;&lt; endl;//noboolalpha取消true和false的输出   输出1

}

五、字符串处理

1.c++字符串有两种处理方法

1) c风格 用字符数组存储 用字符指针操作 char s[100]="mygod"; char *p = “hello”;

C语言字符串的两个要素:1. '\0'结尾 2. 字符串首地址

2) c++ 标准库中string类

2. string类的操作

(1)需要加头文件#include<string>

注意:string是C++的头文件,不是C语言的头文件,和string.h不是一回事, 推荐写成<cstring>

(2)需要加std命名空间 using namespace std;

(3)赋值 连接 拷贝。。。

示例13:

创建string对象

#include <iostream>
#include <string>

using namespace std;

int main()
{
//string是类类型 class type
string s1 = “hello world”;//创建string对象s1,存放字符串"hello world"
string s2(“hello farsight”);
string s3(s2);//使用s2创建s3,使用s2拷贝s3
string s4 = s3;//使用s3拷贝s4

cout&lt;&lt;s1&lt;&lt;endl;//hello world
cout&lt;&lt;s2&lt;&lt;endl;//hello farsight
cout&lt;&lt;s3&lt;&lt;endl;//hello farsight
cout&lt;&lt;s4&lt;&lt;endl;//hello farsight

}

void fun(char* s)
{

}

void fun2(string s)
{

}

示例14:

转换

(1)c风格转为c++风格

string s = "abvc";

(2) 将string转换成C风格字符串

c_str() 将string转成char*

C++推荐我们使用string字符串,但是有些时候api的参数需要我们使用C风格字符串char* 类型的参数,这时候需要我们将string转换成C风格字符串。

#include <iostream>
#include <string>
#include <cstdio>//声明sprintf

using namespace std;

int main()
{
string s1 = “hello world”;
char buf[100];
//格式化字符串%s只要char* 参数
sprintf(buf,“s1 = %s”,s1.c_str());//将s1转换成 char*类型
cout<<buf<<endl;
}

示例15:

赋值

string对象赋值可以通过赋值符号 =,直接将值赋予给目标对象

#include <iostream>
#include <string>

using namespace std;

int main()
{
string s = “hello world”;
string s2 = “hello farsight”;
s2 = s;//将s中存放的字符串放到s2里面,此时s2里也是hello world
cout<<s2<<endl;
}

示例16:

拼接

string可以通过”+ +=”来与string对象进行拼接,

注意: string只能拼接string,如果需要拼接其他类型,只能使用sprintf()进行复杂的字符串格式化

#include <iostream>
#include <string>

using namespace std;

int main()
{
string s1 = “hello”;
string s2 = " world";
s1 += s2;
cout<<s1<<endl;
//s1 += 1;//?不可以 string只能和string做加法

//如果就是想把整数加到string中,在C++string类中没有好办法,还得使用sprintf
char buf[100];
sprintf(buf,"%s %d",s1.c_str(),1);
cout&lt;&lt;buf&lt;&lt;endl;//hello1

}

示例17:

比较 == != < > <= >= 真假 true false

字符串比较比的是什么?比较的是第一个不相等字符的ascii码值。

#include <iostream>
#include <string>

using namespace std;

int main()
{
string s1 = “hello world”;
string s2 = “hello world”;
cout<<(s1==s2)<<endl; //1
string s3 = “hello farsight”;
cout<<(s3!=s1)<<endl; //1
cout<<(s1>s3)<<endl; //1
if(s1 == s2)
{
cout<<“=”<<endl;
}
else
{
cout<<“!=”<<endl;
}
}

示例18:

string类型的成员函数

empty() 和 size()

empty()判断空,如果字符串是空返回true

size()返回字符串长度,算法和strlen是一样的。

#include <iostream>
#include <string>
#include <cstdio>

using namespace std;

int main()
{
string s = " ";
cout<<s.empty()<<endl;//0
string s2 = “”;
cout<<s2.empty()<<endl;//1
string s3 = “hello world”;
cout<<s3.size()<<endl;//11
cout<<sizeof(s3)<<endl;//4 和字符串有多长无关 string类型中只有一个成员变量char*
}

示例19:

获取字符对象

C++可以通过字符串对象[下标]来直接获取该位置的字符。

#include <iostream>
#include <string>

using namespace std;

int main()
{
string s = “hello world”;
for(int i = 0;i < s.size();i++)
{
cout<<s[i];//s[i]获得s中i元素的字符,s[0]是h
}
cout<<endl;//只输出一个换行
s[0] = ‘w’;//将s对象0元素的h赋值成w
cout<<s<<endl;//wello world
}

示例20:

cin输入字符串

cin无法输入空格 如果输入有空格 只拿到空格之前的

#include <iostream>
#include <string>

using namespace std;

int main()
{
string s;
cin>>s;//将输入的字符串存放到对象s中
cout<<s<<endl;
}

示例21:

getline输入字符串 遇到'\n'结束输入

getline()不是string的成员函数

读入一行的字符串,包括空格。

#include <iostream>
#include <string>

using namespace std;

int main()
{
string s;
getline(cin,s);//参数1 cin是输入流对象获得字符串,如果将cin换成其他的流对象,就可以从其他地方读取字符串,参数2 是读取字符串后存放的地方
cout<<s<<endl;
}

练习5:

输入一个字符串,将其中的大写字母转换为小写字母

输入一个字符串到string对象中,然后把string对象中的大写字母转成小写字母。

#include <iostream>
#include <string>
using namespace std;

int main()
{
string s;
cin>>s;
for(int i = 0;i < s.size();i++)
{
if(s[i]>=‘A’ && s[i]<=‘Z’)
s[i]+=32;
}
cout<<s<<endl;
return 0;
}

作业:

盲打所有示例和练习

编程1.

随机点名 定义名字数组string names[]={"rose","jack","tom"};

随机抽取一个数组中的人员

头文件:#include<cstdlib>

#include<ctime>

方法:srand(time(0));初始化随机种子

rand()%5;生成随机数

编程2.

  1. 定义结构体Student 结构体成员:string name

string num

编写函数实现:N个学生信息 宏定义N

  1. inputStudentInfo(Student* s)函数,需要将每个学生信息(姓名 学号)输入计算机保存 cin

参数指向学生数组

3.find_stu(Student* s, string serchName)函数,键盘输入某个学生的姓名 如果该学生存在 则输出其基本信息,

如果不存在,则输出"not found"

C++基础教程

一、数据类型

1.1、第一个C++程序

在这里插入图片描述

1.2、数据类型

在这里插入图片描述

1.3、常量及符号

  • 1、整型常量:整型常量可以分为有符号整型常量和无符号整型常量

    • 八进制:以0开头,即以0作为八进制数的前缀,每位取值范围是0~7,八进制数通常是无符号数。

      • 例如:016、0101、0128都是合法的八进制数
    • 十六进制:以0x或者0X开头,其数码取值范围0 ~ 9,以及A ~ F或者a ~ f

      • 例如:0X2A1、0XC5、0XFFFF都是合法的16进制数
  • 2、实型常量

    • 小数表示法:由整数部分和小数部分组成,整数部分和小数部分每位取值范围是0~9,例如:0.0、3.25、0.00596、2.0
    • 指数表示法:指数部分以符号"e"或者"E"开始,但必须是整数,并且符号"e"或"E"两边都必须有一个数,例如:1.2e20-3.4e-2
  • 3、字符常量:字符常量是单引号括起来的字符,例如:'a'和'?'都是合法字符常量。字符'a'的ASCII码值是97字符'A'的ASCII码值是41字符'?'的ASCII码值是63

  转义字符是特殊的字符常量,使用时以字符串’'代表开始转义,和后面不同的字符表示转义的字符。转义字符表如下所示:
在这里插入图片描述

  • 4、字符串常量:是由一对双引号括起来的零个或多个字符序列,例如:“welcome to our school”、“hello world”。""可以表示一个空字符串。

    • 字符常量’A’和字符串常量"A"是不同的,字符串常量"A"是由'A'和'\0'两个字符组成的,字符串长度是2,字符串常量'A'只是一个字符,没有长度。
  • 5、其他常量

    • 布尔常量:布尔常量只有两个,一个是true,表示真;另一个是false,表示假。
    • 枚举常量:枚举型数据中定义的成员也是常量,这将在后文介绍。
    • 宏定义常量:通过#define宏定义的一些值也是常量。例如:define PI3.1415。其中PI就是常量。

1.4、变量

  • 1、标识符:是用来对C++程序中的常量、变量、语句标号以及用户自定义函数的名称进行标识的符号。
    • 标识符命名规则:
      • 1.有字母、数字及下划线组成,且不能以数字开头。
      • 2.大写和小写字母代表不同意义。
      • 3.不能与关键字同名
      • 4.尽量“见名知义”,应该受一定规则的约束。
    • 不合法的标识符:6A、ABC*、case(保留字)

c++保留关键字,如表所示:
在这里插入图片描述

  • 2、变量与变量说明:变量使用前一定要定义或说明,变量声明的一般形式如下:[修饰符] 类型 变量名标识符

    • 类型是变量类型的说明符,说明变量的数据类型。修改师傅是任选的,可以没有。
      在这里插入图片描述
  • 3、整型变量:整型变量可以分为短整型、整型和长整型,变量类型说明符分别是short、int、long。根据是否有符号还可分为以下6种。

    • 整型 [signed] int
    • 无符号整型 unsigned [int]
    • 有符号短整型 [signed] short [int]
    • 无符号短整型 unsigned short [int]
    • 有符号长整型 [signed] long [int]
    • 无符号长整型 unsigned long [int]
      在这里插入图片描述
  • 4、实型变量:又称为浮点型变量,变量可分为单精度(float)、双精度(double)和长双精度(long double)三种。
    在这里插入图片描述

  • 5、变量赋值:变量值是动态改变的,每次改变都需要进行赋值运算。变量赋值的形式如下:变量名标识符 = 表达式,例如:
    在这里插入图片描述

  • 6、变量赋初值:可以在声明变量的时候就把数据赋给变量,这个过程叫变量赋初值,赋初值的情况有以下几种:

    • int x=5;:表示定义x为有符号的基本整型变量,赋初值为5
    • int x,y,z=6;:表示定义x、y、z为有符号的基本整型变量,z赋初值为6
    • int x=3,y=3,z=3;:表示定义x、y、z为有符号的基本整型变量,且赋予的初值均为3
  • 7、字符变量

    • 1、一个字符类型,即可以字符形式输出,也可以整数类型输出:
      在这里插入图片描述
    • 2、允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算:
      在这里插入图片描述

1.5、数据输入与输出

  • 1、控制台屏幕
    在这里插入图片描述
  • 2、操作控制:在头文件iomanip.h中定义了一些控制流输出格式的函数,默认情况下整型数按十进制形式输出,也可以通过hex将其设置为十六进制输出。流操作的控制具体函数如下
    在这里插入图片描述在这里插入图片描述

二、表达式与语句

2.1、运算符

在这里插入图片描述

  • 1.算术运算符:算术运算主要指常用的加(+)、减(-)、乘(*)、除(/)四则运算,算术运算符中有单目运算符和双目运算符。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 2.关系运算符:关系运算符主要是对两个对象进行比较,运算结果是逻辑常量真或假。
    在这里插入图片描述
    在这里插入图片描述
  • 3、逻辑运算符:逻辑运算符是对真和假这两种逻辑值进行运算,运算后的结果仍是一个逻辑值
    在这里插入图片描述
  • 4、赋值运算符
    在这里插入图片描述
    在这里插入图片描述
  • 5、位运算符
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 6、移位运算符
    在这里插入图片描述
    在这里插入图片描述
  • 7、sizeof运算符
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 8、条件运算符
    在这里插入图片描述
    在这里插入图片描述
  • 9、逗号运算符
    在这里插入图片描述

2.2、优先级和结合性

在这里插入图片描述

  • 1、优先级
    在这里插入图片描述
  • 2、结合性
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3、表达式

  • 1.算数表达式
    在这里插入图片描述
  • 2.关系表达式
    在这里插入图片描述
  • 3.条件表达式
    在这里插入图片描述
  • 4.赋值表达式
    在这里插入图片描述
  • 5.逻辑表达式
    在这里插入图片描述
  • 6.逗号表达式
    在这里插入图片描述

2.4、类型转换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、条件判断语句

3.1、决策分支

在这里插入图片描述

3.2、判断语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3、使用条件运算符进行判断

在这里插入图片描述

3.4、switch语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5、判断语句的嵌套

在这里插入图片描述
在这里插入图片描述

四、循环语句

4.1、while循环

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2、do…while循环

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3、while与do…while比较

在这里插入图片描述
在这里插入图片描述

4.4、for循环

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.5、循环控制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.6、循环嵌套

在这里插入图片描述
在这里插入图片描述

4.7、循环应用实例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、函数

5.1、函数参数以及返回值

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2、函数调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3、变量作用域

在这里插入图片描述

5.4、重载函数

在这里插入图片描述

5.5、内联函数

在这里插入图片描述

5.6、变量的存储类别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、指针和引用

6.1、一维数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2、二维数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3、字符数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.4、指针

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.5、指针与数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.6、指向函数的指针

在这里插入图片描述
在这里插入图片描述

6.7、引用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.8、指针数组

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

七、构造数据类型

7.1、结构体

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.2、结构体与函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.3、结构体数组

在这里插入图片描述
在这里插入图片描述

7.4、共用体

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.5、枚举类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.6、自定义数据类型

在这里插入图片描述

八、面向对象编程

8.1、面向对象概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.2、面向对象与面向过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.3、统一建模语言

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

九、类和对象

9.1、C++类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.2、构造函数

在这里插入图片描述
在这里插入图片描述

9.3、析构函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.4、类成员

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.5、友元

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9.6、命名空间

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十、继承与派生

10.1、继承

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.2、重载运算符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.3、多重继承

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.4、多态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.5、抽象类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十一、模板

11.1、函数模板

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.2、类模板

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

11.3、模板的使用

在这里插入图片描述

11.4、链表类模板

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十二、STL标准模板库

12.1、序列容器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12.2、结合容器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12.3、算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12.4、迭代器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十三、RTTI与异常处理

13.1、RTTI(运行时类型识别)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13.2、异常处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十四、文件操作

14.1、文件流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

14.2、文件打开

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

14.3、文件的读写

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

14.4、文件指针移动操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

14.5、文件和流的关联和分离

在这里插入图片描述

14.6、删除文件

在这里插入图片描述

十五、网络通信

15.1、TCP/IP协议

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15.2、套接字

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15.3、简单协议通讯

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/835824.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一道名题-(csp 儒略日)的心得与技巧

这道题&#xff0c;我做了三年&#xff0c;平均每年做一次&#xff0c;我来讲讲我的心得。 读题 题面很长&#xff0c;细节很多&#xff0c;我们需要耐心细心的读&#xff0c;此时多花一点时间是划得来的。 我们得出大致关系如下 历法公历日常用历儒略历公元前公元后历法公历…

springBoot项目导入外部jar包

一、将外部的jar包复制到指定文件夹 二、修改pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocati…

利用abapGit的离线模式导出、导入开发对象

1. 背景 abapGit是为ABAP服务器开发的开源Git客户端&#xff0c;用于在ABAP系统之间导入和导出ABAP对象。 使用abapGit&#xff0c;可以将ABAP对象从任何系统导出到另一个系统&#xff0c;通常是从本地系统导出到云&#xff0c;或者从一个云系统导出到另一个云系统。 当然从…

红帽8.2版本CSA题库:第一题配置网络设置

红帽认证工程师是业界公认的最权威的Linux认证之一。RHCE 是世界上第一个面向Linux 的认证考试&#xff0c;它不是一个普通的认证测试&#xff0c;和其他操作系统认证考试相比&#xff0c;它没有笔试&#xff0c;全部是现场实际操作&#xff0c;所以RHCE成了业界公认的最难的认…

机器学习笔记 - YOLO-NAS 最高效的目标检测算法之一

一、YOLO-NAS概述 YOLO(You Only Look Once)是一种对象检测算法,它使用深度神经网络模型,特别是卷积神经网络,来实时检测和分类对象。该算法首次在 2016 年由 Joseph Redmon、Santosh Divvala、Ross Girshick 和 Ali Farhadi 发表的论文《You Only Look Once: Unified, Re…

自监督去噪:Noise2Self原理分析及实现 (Pytorch)

文章地址:https://arxiv.org/abs/1901.11365 代码地址: https://github.com/czbiohub-sf/noise2self 要点   Noise2Self方法不需要信号先验信息、噪声估计信息和干净的训练数据。唯一的假设就是噪声在测量的不同维度上表现出的统计独立性&#xff0c;而真实信号表现出一定的…

亚马逊云科技七项生成式AI新产品生成式AI,为用户解决数据滞后等难题

7月27日&#xff0c;亚马逊云科技在纽约峰会上一连发布了七项生成式AI创新&#xff0c;涵盖了从底层硬件到工具、软件、再到生态的全方位更新&#xff0c;成为它在该领域迄今最全面的一次升级展示&#xff0c;同时也进一步降低了生成式AI的使用门槛。 亚马逊云科技凭借自身端到…

vue实现全屏、退出全屏方法

有效解决问题 : Failed to execute ‘exitFullscreen‘ on ‘Document‘: Document not active 在未全屏的情况下触发exitFullscreen&#xff0c;会报这个错。 <el-button class"screen" click"toggleFullscreen">全屏</el-button> fullscre…

Unity 编辑器选择器工具类Selection 常用函数和用法

Unity 编辑器选择器工具类Selection 常用函数和用法 点击封面跳转下载页面 简介 在Unity中&#xff0c;Selection类是一个非常有用的工具类&#xff0c;它提供了许多函数和属性&#xff0c;用于操作和管理编辑器中的选择对象。本文将介绍Selection类的常用函数和用法&#xff…

Redis面试题2

Redis面试题-2 10、统计高并发网站每个网页每天的 UV 数据&#xff0c;结合Redis你会如何实现&#xff1f; 选用方案&#xff1a;HyperLogLog 如果统计 PV 那非常好办&#xff0c;给每个网页一个独立的 Redis 计数器就可以了&#xff0c;这个计数器的 key 后缀加上当天的日期…

loguru 日志库

1 下载地址 loguru PyPI 2 安装 pip install loguru 3 简单使用 from loguru import logger# 当前目录下创建 log 文件夹&#xff0c;保留 3 天 logger.add("./Log/INFO_{time:YYYY-MM-DD}.log", encoding"utf-8", retention"3 day")logger.…

JUC并发编程(一)JUC工具使用

文章目录 Synchronizedsynchronized解决 Lock锁synchronized锁与Lock锁的区别 生成者消费者问题synchronized实现lock版实现- conditioncondition实现精准通知唤醒 CallableJUC常用辅助类CountDownLatch&#xff08;倒计时器&#xff09;CyclicBarrier&#xff08;循环栅栏&…

Find My资讯|AirTag 2或将在明年底量产,苹果Find My应用全面

AirTag 2021 年和 2022 年出货量预计在 2000 万个和 3500 万个。如果 AirTag 出货量继续增长&#xff0c;苹果大概率会开发第二代产品。郭明錤现更新了其预测报告&#xff0c;他表示&#xff0c;苹果 AirTag 2 可能会在明年第四季度量产。 AirTag 是用于固定在背包、行李和其…

Typora未保存报错闪退

Typora未保存报错闪退 在使用Typora编写笔记时&#xff0c;可能会遇到没有保存就退出的情况&#xff0c;也可能软件突然崩溃导致之前的笔记没有保存&#xff0c;实际上Typora会自动保存记录在本地文件中&#xff0c;接下来我们进行恢复。 点击左上角文件标签&#xff0c;进入…

《Gradle构建脚本的基本结构和语法》

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【Python机器学习】实验08 决策树

文章目录 决策树1 创建数据2 定义香农信息熵3 条件熵4 信息增益5 计算所有特征的信息增益&#xff0c;选择最优最大信息增益的特征返回6 利用ID3算法生成决策树7 利用数据构造一颗决策树Scikit-learn实例决策树分类决策树回归Scikit-learn 的决策树参数决策树调参 实验1 通过sk…

学习笔记|简单分享一下自建Gravatar镜像

目录 前言 Gravatar 使用 思路 操作 步骤一&#xff1a;注册或登录华为云 步骤二&#xff1a;创建委托账号 步骤三&#xff1a;创建OBS桶 步骤四&#xff1a;数据回源配置 步骤五&#xff1a;配置生命周期规则 步骤六&#xff1a;绑定自定义域名 步骤七&#xff1a…

学习Android嵌入式需要做哪些准备?

首先嵌入式系统可以分为四个层次&#xff1a;硬件层、驱动层、系统层和应用层&#xff0c;其中每一个层次都会有一类专业的学生适合深入学习。硬件层就适合电子、通信、机电等学生&#xff0c;驱动层因为比较难&#xff0c;按我的理解都是需要从硬件层和应用层过渡。而应用层就…

LNMP原理及安装

LNMP: 目前成熟的企业网站的应用模式之一&#xff0c;指的是一套协同工作的系统和相关软件能够提供静态页面服务&#xff0c;也可以提供动态web服务 LNMP的组成: L &#xff1a;表示linux系统&#xff0c;操作系统N &#xff1a;表示nginx网站服务&#xff0c;前端&#xf…

项目运行时出现:“listen EADDRINUSE: address already in use :::3002“

listen EADDRINUSE: address already in use :::3002 解决&#xff1a;查找对应 pid&#xff1a; netstat -ano PS C:\Users\admin\Desktop\chatgpt-web\service> netstat -ano 控制台输入&#xff1a;taskkill -f /pid 25420&#xff08;抓图是别的进程&#xff09; 结…