c++学习笔记(Day1)-- 基础语法(一)
2021/4/18 20:27:57
本文主要是介绍c++学习笔记(Day1)-- 基础语法(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录- 一.认识 C++
- C++的特点
- 命名空间
- C++从源码到可执行文件所经历的过程
- C++ 标识符规则
- 关键字:
- 二.C++ 数据类型
- 三.C++ 变量常量
- 变量
- 变量作用域
- 常量
- 四.C++ 修饰符
- 数据类型修饰符
- 类型限定符
- 存储类修饰符
- 五.C++ 运算符
- 算术运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 赋值运算符
- 杂项运算符
- 六.C++ 三大结构
- 顺序结构
- 分支结构
- 循环结构
- 七.C++ 数字、数组、字符串
- 数
- 数组
- 字符串
一.认识 C++
C++的特点
-
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化 编程、面向对象编程和泛型编程。
- 动态类型与静态类型编程语言的比较:
动态类型:变量名绑定一种类型的对象后,在运行过程中可以随时改变。 静态类型:变量名在程序运行前就检查绑定类型,在运行期间类型不能改变(也可以理解为变量内存分配的动静态关系)。Java、C/C++、C# 等属于静态类型编程语言,而 Python、PHP、Perl 等属于动态类型语言。
- 编译型语言和解释型语言
-
面向对象(OOP)开发的三大特性:
-
封装 、继承 、多态(有时候加上抽象称为四大特性)
-
封装:黑盒特性,不关注内在属性和具体实现细节,只关注输入和输出。
-
继承:在原有代码上增加少量变化修改,提高代码复用性。
-
多态:多态性往往表现为"一个接口,多个功能",基于面向对象,提升代码的可扩展性。
-
-
类、对象,属性、方法、即时变量:
- 类:一些具有共同特征的事物的抽象模型。
- 对象:对象是类的实例,即具有共同特征的某一具体实例。
- 属性:对象的静态特征。
- 方法:对象的动态行为。
- 即时变量:对象的时间状态。
-
C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。
命名空间
命名空间:为了区分相同的变量或者函数,人为划分的范围标识符,也可以理解为调用的作用域。
C++从源码到可执行文件所经历的过程
过程:
- 预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。 - 编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件 - 汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件 - 链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件
C++ 标识符规则
-
C++ 标识符是用来标识变量、函数、类、模块,或任何其他用户自定义项目的名称。一个标识符以字母 A-Z 或 a-z 或下划线 _ 开始,后跟零个或多个字母、下划线和数字(0-9)。
-
C++ 标识符内不允许出现标点字符,比如 @、& 和 %。C++ 是区分大小写的编程语言。因此,在 C++ 中,Manpower 和 manpower 是两个不同的标识符。
关键字:
关键字(保留字)
二.C++ 数据类型
- 数值型
- 预定义类型(#define),整型、字符型、布尔型、浮点型、空类型,指针类型
类型 | 位 | 范围 |
---|---|---|
char | 1 个字节 | -128 到 127 或者 0 到 255 |
unsigned char | 1 个字节 | 0 到 255 |
signed char | 1 个字节 | -128 到 127 |
int | 4 个字节 | -2147483648 到 2147483647 |
unsigned int | 4 个字节 | 0 到 4294967295 |
signed int | 4 个字节 | -2147483648 到 2147483647 |
short int | 2 个字节 | -32768 到 32767 |
unsigned short int | 2 个字节 | 0 到 65,535 |
signed short int | 2 个字节 | -32768 到 32767 |
long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
signed long int | 8 个字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 |
unsigned long int | 8 个字节 | 0 到 18,446,744,073,709,551,615 |
float | 4 个字节 | 精度型占4个字节(32位)内存空间,+/- 3.4e +/- 38 (~7 个数字) |
double | 8 个字节 | 双精度型占8 个字节(64位)内存空间,+/- 1.7e +/- 308 (~15 个数字) |
long double | 16 个字节 | 长双精度型 16 个字节(128位)内存空间,可提供18-19位有效数字。 |
wchar_t | 2 或 4 个字节 | 1 个宽字符 |
变量的大小会根据编译器和所使用的电脑而有所不同。
- 自定义数据类型
- 包含数组、结构体struct、联合体union、枚举enum、类;
- typedef
为一个已有的类型取一个新的名字(别名)。
大部分都和c语言相同,这里简要记录一下。
三.C++ 变量常量
变量
-
声明和定义
extern int d = 3, f = 5; // d 和 f 的声明 int d = 3, f = 5; // 定义并初始化 d 和 f byte z = 22; // 定义并初始化 z char x = 'x'; // 变量 x 的值为 'x'
extern:在单个文件中或者多个文件中使用(通常多文件),改变变量的作用域。一个变量可以声明多次,但只能定义一次。
-
左值(Lvalues)和右值(Rvalues)
- 左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。
- 右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
变量作用域
- 局部变量
在函数或一个代码块内部声明的变量,称为局部变量,它们只能被函数内部或者代码块内部的语句使用。 - 全局变量
在所有函数外部声明的变量,称为全局变量。全局变量可以被任何函数访问。也就是说,全局变量一旦声明,在整个程序中都是可用的。
注意:
在程序中,局部变量和全局变量的名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。
当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化为下列值。
常量
-
固有常量(常数值)
像10、3.14159、true 、\a、‘a’、"hello, dear"等值,无法改变。 -
定义常量
-
使用 #define 预处理器。
#define LENGTH 10 #define WIDTH 5
在预处理阶段进行替换,需要注意替换后的优先级顺序。
#define LENGTH a+b #define WIDTH c d=LENGTH*WIDTH;
这里d=a+b*c,而不是想要的(a+b)*c。
-
使用 const 关键字。
const int LENGTH = 10; const int WIDTH = 5;
具有变量的属性,有数据类型,占用存储单元,有地址,可以用指针指向它。
常量变量名一般定义为大写字母形式。
-
四.C++ 修饰符
数据类型修饰符
signed、unsigned、long 和 short 。
类型限定符
- const: 类型的对象在程序执行期间不能被修改改变。
- volatile: volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。
- restrict:用于告诉编译器,对象已经被指针所引用,不能通过除该指针外所有其他直接或间接的方式修改该对象的内容。
存储类修饰符
- auto:在C++11中已删除这一用法。
- register:定义存储在寄存器中而不是 RAM 中的局部变量。
- static:修饰局部变量时,保持局部变量的值,而不需要在每次它进入和离开作用域时进行创建和销毁;修饰全局变量时,会使变量的作用域限制在声明它的文件内,只能在单文件内访问,与extern作用相反。
- extern:用来在另一个文件中声明一个全局变量或函数。
- mutable:仅用于类的对象。
五.C++ 运算符
算术运算符
+、-、*、/、%、++、--
关系运算符
>、<、==、>=、<=、!=
逻辑运算符
&&、||、!
位运算符
!、|、&、^、~、>>、<<
赋值运算符
=、+=...(组合赋值)
杂项运算符
运算符 | 描述 |
---|---|
sizeof | sizeof 运算符返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。 |
Condition ? X : Y | 条件运算符(三目表达式)。如果 Condition 为真 ? 则值为 X : 否则值为 Y。 |
, | 逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。 |
.(点)和 ->(箭头) | 成员运算符用于引用类、结构和共用体的成员。 |
Cast | 强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。 |
& | 指针(取址)运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。 |
* | 指针运算符 * 指向一个变量。例如,*var; 将指向变量 var。 |
六.C++ 三大结构
顺序结构
从前到后按顺序依次执行。
分支结构
-
if
-
switch
switch(expression){ case constant-expression : statement(s); break; // 可选的 case constant-expression : statement(s); break; // 可选的 // 您可以有任意数量的 case 语句 default : // 可选的 statement(s); }
case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。 -
? :
循环结构
-
while
-
for
for ( init; condition; increment ) { statement(s); }
两个分号不可省略,三个表达式可以省略。
-
do-while
-
循环控制语句
- break:遇见则跳出当前循环。
- continue:遇见则略过本次循环的后续内容。
- goto:无条件跳转(不建议使用)。
七.C++ 数字、数组、字符串
数
-
赋值
int a=10;
-
数学计算
引用数学头文件 <cmath>
序号 | 函数 & 描述 |
---|---|
1 | double cos(double);该函数返回弧度角(double 型)的余弦。 |
2 | double sin(double);该函数返回弧度角(double 型)的正弦。 |
3 | double tan(double);该函数返回弧度角(double 型)的正切。 |
4 | double log(double);该函数返回参数的自然对数。 |
5 | double pow(double, double);假设第一个参数为 x,第二个参数为 y,则该函数返回 x 的 y 次方。 |
6 | double hypot(double, double);该函数返回两个参数的平方总和的平方根,也就是说,参数为一个直角三角形的两个直角边,函数会返回斜边的长度。 |
7 | double sqrt(double);该函数返回参数的平方根。 |
8 | int abs(int);该函数返回整数的绝对值。 |
9 | double fabs(double);该函数返回任意一个浮点数的绝对值。 |
10 | double floor(double);该函数返回一个小于或等于传入参数的最大整数。 |
-
生成随机数
关于随机数生成器,有两个相关的函数。一个是 rand(),该函数只返回一个伪随机数。生成随机数之前必须先调用 srand() 函数。#include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main () { int i,j; // 设置种子 srand( (unsigned)time( NULL ) ); /* 生成 10 个随机数 */ for( i = 0; i < 10; i++ ) { // 生成实际的随机数 j= rand(); cout <<"随机数: " << j << endl; } return 0; }
数组
-
一维数组
type arrayName [ arraySize ]; -
二维数组
type arrayName [ arraySize1][ arraySize 2]; -
数组初始化
指定长度 double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0}; 不指定长度 double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0}; 多维数组赋值 int a[3][4] = { {0, 1, 2, 3} , /* 初始化索引号为 0 的行 */ {4, 5, 6, 7} , /* 初始化索引号为 1 的行 */ {8, 9, 10, 11} /* 初始化索引号为 2 的行 */ }; int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
-
数组元素赋值与访问
balance[4] = 50.0; double c=balance[4];
除了初始化时候可以整体赋值,之后只能一个元素一个元素的赋值。
数组元素的位置从0开始。
字符串
-
C语言类型的字符串
char str[] = "string"; 字符串实际上是使用 null 字符 \0 终止的一维字符数组。实际长度比字符数多一。 只能初始化时整体赋值,之后不行,比如: char str[]; str = "string"; 这样是错误的。
字符串操作函数:
strcpy(s1, s2):复制字符串 s2 到字符串 s1。 strcat(s1, s2):连接字符串 s2 到字符串 s1 的末尾。 strlen(s1):返回字符串 s1 的长度。 strcmp(s1, s2):如果 s1 和 s2 是相同的,则返回 0;如果 s1\<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。 strchr(s1, ch):返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。 strstr(s1, s2):返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
-
c++的string类
引用<string>,string类的特性://变量声明 string str1 = "runoob"; string str2 = "google"; string str3; int len ; // 复制 str1 到 str3 str3 = str1; 可以相互赋值,C语言字符串数组不行。 赋值后长度可以发生变化,C语言字符则串必须先定义好长度。 // 连接 str1 和 str2 str3 = str1 + str2; // 求字符串长度 len = str3.size(); 字符串长度为字符个数,不包括\0。 //字符串比较 str1==str2;str1>=str2; 直接使用关系运算符比较字符串类。 //字符串数组 string strs[2]={"as","ssk"};
这篇关于c++学习笔记(Day1)-- 基础语法(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享