C++概述:
C++是“C Plus Plus"的简称。顾名思义,C++是在C语言的基础上增加新的特性,玩出新花样。C++的设计目标是保持在C语言简洁性的基础上,提供更多的功能和灵活性。
C与C++的区别:
C | C++ | |
语法 | 过程化的编程语言 | 面向对象的编程语言 |
编程风格 | 注重过程化的编程风格,最主要关注算法和函数的设计 | C++标准库比C标准库更加丰富和功能强大,包含了大量容器,算法和其他常用功能模块 |
异常处理 | 没有内置的异常处理机制,通常使用返回错误码的方式来处理错误 | C++支持异常处理机制,可以捕获和处理程序中的异常情况 |
兼容性 | C++是C的超集,也就是说,任何一个符合C语法规则的程序也是一个合法的C++程序。C++可以调用C语言编写的函数,并且可以与C语言代码共享。 | |
选择 | C++相对于C来说更加强大和灵活,适用于更复杂的应用场景,但对于一些简单的、性能要求较高的程序,C语言可能更适合。选择使用哪种语言,取决于具体的需求和编程的目标。 |
基本语法
C++编译的四个阶段
1.预处理阶段(Preprocessing):
在这个阶段,预处理器会处理源文件中的预处理指令,比如包含头文件、宏替换、条件编译等。预处理器会生成一个经过预处理的源文件。预处理的结果是一个没有注释和宏定义,所有头文件都被展开的纯净C++代码文件。
2.编译阶段(Compilation):
编译器会将经过预处理的源文件转换为汇编代码(Assembly code),这个阶段包括词法分析、语法分析、语义分析等步骤,最终生成汇编代码。
3.汇编阶段(Assembling):
汇编器会将汇编代码转换为机器语言代码,生成目标文件(Object file),这个文件包含了二进制形式的指令和数据。
4.链接阶段(Linking):
链接器会将目标文件与库文件进行链接,解析外部引用、符号解析等,生成可执行文件。在C++中,链接器还会处理类的实例化、模板的具体化等特定于C++的内容。
这四个阶段一般都是自动完成,由编译器和链接器自动处理。编译器通常会调用预处理器、汇编器和链接器来完成整个编译过程。
"HelloWorld”的编写
你可以使用下列代码编写一个简单的C++程序
#include<iostream>
int main(){
std::cout<<"Hello, World!"<<std::endl;
return 0;
}
将以上代码保存为一个以.cpp为后缀的文件(比如helloworld.cpp),然后使用C++编译器运行即可。
标准库
C++中的标准库是一组预定义的功能库,提供了丰富的功能和工具,方便我们开发C++程序。
标准库-类和函数的集合(C++ standard Library)
标准模板库(Standard Template Library)
例如:
头文件 | <iostream>、<string> |
容器 | vectory、list、map等 |
其他 | 日期和时间库、输入输出函数、数学函数等 |
命名空间
C++种的命名空间是用来避免命名冲突的一种机制。当在一个程序中使用了不同的库或者代码模块,可能会存在相同的函数、类、变量等命名,这个时候可以用命名空间来区分他们。
在C++种使用关键词namespace来定义命名空间
#include<iostream>
//定义一个命名空间
namespace A{
void func(){
std::cout<<"This is function A"<<std::endl;
}
}
//定义另一个命名空间
namespace B{
void func(){
std::cout<<"This is function B"<<std::endl;
}
}
int main(){
//调用A命名空间中的函数
A::func();
//调用B命名空间中的函数
B::func();
return0;
}
总结:通过使用命名空间,我们可以将具有相同名称的函数或者其他实体进行区分,避免了命名冲突的问题。
std的意思
在C++中,std是C++标准库(Standard Library)中命名空间(Namespace)。
C++标准库中的函数、类、变量等被放在了std命名空间中,通过std::前缀来访问这些内容。
C++关键词
关键字:被C++语言赋予了特定含义的英文单词。
基本数据类型关键字:int、char、float、double、bool等。
控制流关键字:if、else、switch、case、default、while、do、for等。
函数关键字:void、return。
类和对象关键字:class、struct、public、private、protected、new、delete等。
命名空间关键字:namespace、using。
异常处理关键字:try、catch、throw。
其他关键字:static、const、virtual、extern等。
语法符号
标识符
在编程语言中用来命名变量、函数、类、对象等各种实体的名称
int myVariable;//变量名 void myFunction(); //函数名
class MyClass{}; //类名 MyClass myObject; //对象名
标识符通常由字母、数字、$和下划线组成
a~z 、 A~Z 、0~9、$ 、_
规定:
1、数字不能开头; 2、不能包含空格;
3、区分大小写; 4、不能使用关键字
建议:
1、遵循一些命名规范;
如使用驼峰命名法或下划线命名法,以提高代码的可读性和一致性。
数据类型
数据类型决定了变量的大小和操作
基本数据类型 | 名称 |
整型 | int、short、long、longlong |
浮点型 | float、double、longdouble |
字符型 | char |
布尔型 | bool |
空类型 | void |
布尔类型
作用:布尔数据类型代表真或假的值
bool类型只有两个值:
*true --- 真(本质是1)
*false --- 假(本质是0)
bool类型占 == 1个字节 == 大小
复合数据类型 | 说明 |
数组 | 一组具有相同类型的元素 |
结构体 | 一种用户自定义的数据类型,可以包含多个不同类型的成员 |
枚举 | 一种用户自定义的数据类型,可以表示一组命名的常量值 |
指针 | 存储内存地址的变量 |
引用 | 为对象或变量起一个别名 |
类 | 用于封装数据和方法的用户自定义数据类型 |
联合 | 一种特殊的数据类型,可以在相同的内存位置存储不同类型的数据 |
常量
常量是指在程序运行期间其值不可被修改的数据
C++定义常量有两种方式
1.#define 宏常量:#define 常量名 常量值
通常在文件上方定义,表示一个常量
//1、宏常量
#define day 7
int main(){
cout<<"一周里总共有"<<day<<"天"<<endl;
//day = 8;//报错,宏常量不可修改
return 0;
}
2.const 修饰的变量 const 数据类型 常量名=常量值
通常在变量定义前加关键字const,修饰该变量为常量,不可修改
//2.const修饰变量
int main(){
const int month=12;
cout<<"一年里共有"<<month<<"个月份"<<endl;
//month = 24;//报错,常量不可修改
return 0;
}
变量
变量是用来存储和表示数据的容器
整数类型:
int mylnt;//声明一个整数变量
int mylnt =10;//声明并初始化一个整数变量
int mylnt1,mylnt2;//声明多个整数变量
浮点数类型:
float myFloat;//声明一个单精度浮点数变量
float myFloat = 3.14;//声明并初始化一个单精度浮点数变量
double myDouble;//声明一个双精度浮点数变量
double myDouble = 2.71734;//声明并初始化一个双精度浮点数变量
字符类型:
char myChar;//声明一个字符变量
char myChar = "a";//声明并初始化一个字符变量
布尔类型:
bool b1 = true;
bool b2 = false;
运算符
大部分运算符在C和C++中是相同的
运算符名称 | 说明 |
算术运算符 | +、-、*、/、% |
赋值运算符 | =、+=、-=、*=、/=、%=。 |
比较运算符 | ==、!=、>、<、>=、<= |
逻辑运算符 | &&、||、! |
位运算符 | 按位与(&)、按位或( | )、按位取反(~)、按位异或(^)、左移(<<)、右移(>>)等 |
条件运算符 | 用于根据条件进行选择,如三元运算符(条件?结果1:结果2) |
自增自减运算符 | 自增(++)、自减(--) |
成员运算符 | 用于访问类、结构体和联合体的成员,如成员选择运算符(.)、成员指针运算符(->)。 |
输入输出
大部分运算符在C和C++中是相同的,但也存在一些细微的差异
c | c++ |
scanf和printf函数进行输入输出 | 使用cin和cout对象进行输入输出 |
使用%d、%f等格式化字符来表示不同类型的数据 | 使用>>和<<运算符来输入输出不同类型的数据 |
布尔运算符的的真值为0以外的所有值,结果为1(真)或(0)假 | 布尔运算符的真值只能是true或false,结果为1或0 |
综合案例
生成随机数
#include<iostream>
#include<random>
using namespace std;
int main(){
//使用随机数引擎和分布器生成随机数
std::random_device rd;//随机数引擎
std::mt19937 gen(rd());//使用随机数引擎生成随机数
std::uniform_int_distribution<int>dis(1,100);//生成1到100的随机整数
//生成随机数
int randomNum = dis(gen);
//输出随机数
std::cout<<"随机数"<<randomNum<<std::endl;
return 0;
}
拓展案例-猜大小
#include<iostream>
#include<random>
using namespace std;
//生成1~100随机整数
int randomNum(){
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<int>dist(1,100);
int random_Num=dist(gen);
return random_Num;
}
int main(){
//调用函数生成随机数
int ra = randomNum();
cout<<"随机数:"<<ra<<endl;
while(true){
cout<<"输入一个随机数"<<endl;
int num;
cin>>num;
if(ra>num){
cout<<"猜小了。"<<endl;
}elseif(ra<num){
cout<<"猜大了。"<<endl;
}else{
cout<<"恭喜你猜对了!"<<endl;
break;
}
}
return 0;
}