从零开始学习c++全套通关系列(第一章)万字总结,建议收藏~

一、字面常量

cpp 复制代码
//
// Created by wxj05 on 2024/7/13.
//
#include <iostream>
using namespace std;

int main()
{
    //整形、实型、字符、字符串
    //1.整形(整数)
    cout<<12<<endl;
    //2.实型(小数)
    cout<<12.12<<endl;
    //3.字符(''包围的,单个字符)
    cout<<'V'<<endl;
    //4.字符串(""包围的,任意个字符)
    cout<<"Hello C++"<<endl;
    return 0;
}

整型字面常量(Integer literals):表示整数值,可以是十进制、八进制(以0开头)、十六进制(以0x或0X开头)的数字序列。

浮点型字面常量(Floating-point literals):表示浮点数值,包括普通的浮点数和科学计数法表示。

布尔型字面常量(Boolean literals) :表示真或假的值,只有两个取值:truefalse

字符字面常量(Character literals):表示单个字符,用单引号括起来。

字符串字面常量(String literals):表示一个字符序列,用双引号括起来。

空字面常量(Null literal) :表示空指针或无效值,用nullptr表示。

字面常量在程序中直接使用,不需要额外的变量或声明,可以直接作为表达式的一部分使用。

在C++中,字面常量的类型由其形式来确定,例如带小数点的是浮点型,带引号的是字符或字符串型,等等。字面常量在编译时直接替换为其具体的值,因此效率较高,且在编程中经常被用来表示固定的数值或者文本信息。

二、标识符和关键字

标识符(Identifiers)

标识符是程序员定义的名称,用来标识变量、函数、类、对象等各种实体。标识符的命名规则如下:

组成规则

  • 可以包含字母(大小写敏感)、数字和下划线 _
  • 必须以字母或下划线开头,不能以数字开头。
  • 不能使用C++中的关键字作为标识符。
  • 标识符中不允许出现空格或标点符号。

命名规范

  • 命名要有意义,能够反映出其所代表的内容。
  • 使用驼峰命名法(camelCase)或者下划线分隔命名法(snake_case)等命名规范,以提高可读性。
  • 不能使用关键字命名。

示例合法标识符:

  • myVariable
  • _count
  • ClassName
  • isValid

关键字

java 复制代码
and      and_eq   asm      auto     bitand   bitor    bool
break    case     catch    char     class    compl    const
constexpr const_cast continue decltype default  delete   do
double   dynamic_cast else     enum     explicit export   extern
false    float    for      friend   goto     if       inline
int      long     mutable  namespace new      noexcept not
not_eq   nullptr  operator or       or_eq    private  protected
public   register reinterpret_cast return   short    signed
sizeof   static   static_assert static_cast struct   switch
template this     thread_local throw    true     try      typedef
typeid   typename union    unsigned using    virtual  void
volatile wchar_t while

三、符号常量

在C++中,符号常量通常是通过预处理指令 #define 或者 const 关键字来定义的。它们是用于代表固定值或者特定意义的常量,可以在程序中多次使用而不必重复写出其值,提高了代码的可维护性和可读性。

使用 #define 定义符号常量

使用 #define 预处理指令可以定义符号常量,形式为:

cpp 复制代码
#define CONSTANT_NAME value

其中 CONSTANT_NAME 是符号常量的名称,value 是其对应的值。注意,在使用 #define 定义符号常量时,不需要指定数据类型,它们只是简单的文本替换。

cpp 复制代码
#define PI 3.14159 #define MAX_SIZE 100

使用 const 关键字定义符号常量

另一种定义符号常量的方式是使用 const 关键字,这种方式更加类型安全,而且能够利用编译器的类型检查。

cpp 复制代码
const double PI = 3.14159; const int MAX_SIZE = 100;

在这里,const 关键字声明了一个常量,并且指定了它的数据类型。与 #define 相比,使用 const 关键字可以避免宏定义的一些潜在问题,如无法提供类型安全性和作用域控制。

比较 #defineconst

  • 作用域#define 定义的符号常量没有作用域,它们在定义点之后的整个文件中可见。而使用 const 定义的常量有与其所在作用域相同的作用域。
  • 类型安全#define 是简单的文本替换,不具有类型信息,容易导致意外的副作用。const 常量具有明确的类型信息,编译器可以进行类型检查。
  • 调试和可读性const 常量会保留其名称和类型信息,有助于提高代码的可读性和可维护性。#define 宏常量只是简单的文本替换,在调试时可能会导致一些困难。

四、变量

在C++中,变量是程序中用于存储和操作数据的基本单元。变量可以通过指定类型、名称和可选的初始值来定义。

变量的声明

语法:变量类型 变量名;

示例:int num;

变量的赋值

语法:变量名 = 变量值

示例:num = 10;

变量类型

C++支持多种基本数据类型和复合数据类型,包括但不限于:

  • 整型(Integer types) :如 int, short, long, long long 等。
  • 浮点型(Floating-point types) :如 float, double, long double 等。
  • 字符型(Character types) :如 char
  • 布尔型(Boolean type) :如 bool,只能存储 truefalse
  • 复合数据类型 :如 数组(array), 结构体(struct), 类(class) 等。

示例

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int age = 25;             // 整型变量
    double pi = 3.14159;      // 双精度浮点型变量
    char initial = 'J';       // 字符型变量
    bool isValid = true;      // 布尔型变量

    // 输出变量的值
    cout << "Age: " << age << endl;
    cout << "Pi: " << pi << endl;
    cout << "Initial: " << initial << endl;
    cout << "isValid: " << isValid << endl;  // 输出 true 作为 1

    return 0;
}

在这个示例中,我们定义了几种不同类型的变量,并且使用 cout 来输出它们的值。

变量的快速定义

快捷形式一:声明变量的同时进行赋值。

cpp 复制代码
int age = 18;
string name = "VON";
cout<<"我的名字是"<<name<<"今年"<<age<<"岁"<<endl;

快捷方式二:一次性声明多个变量。

cpp 复制代码
int a,b,c;
a=1;
b=2;
c=3;
cout<<a<<b<<c<<endl;

快捷方式三:一次声明多个变量并进行赋值

cpp 复制代码
int a=1,b=2,c=3;
cout<<a<<b<<c<<endl;

五、解决clion中汉字编码问题

这就是典型的中文乱码,可见输出的并不是我们想要的东西。那么如何去解决这类问题呢?

法一:可以直接导入头文件"Windows.h"

法二、在主函数中加入system("chcp 65001");

注:使用这种方法会有Active code page: 65001,这个完全不影响。

六、标识符的命名规范

1. 见名知意

标识符的命名应当有具体的某种含义,例如:

cpp 复制代码
string name = "VON";
int age = 18;

name表示的是姓名

age代表的是年龄

2. 下划线命名法

为了区别每一个单词,可以用下划线进行区分。例如:

cpp 复制代码
string student_name = "张三";
string teacher_name = "李四";
int student_age = 18; 
int teacher_age = 48;

注:下划线命名法,英文单词一般全小写

3. 小驼峰法

  • 大小写首字母区分
  • 简短的单词可以全大写

例如:

cpp 复制代码
string studentName = "张三";
string teacheNname = "李四";
int studentAge = 18; 
int teacherAge = 48;

4. 大驼峰法

一般用于类的命名

cpp 复制代码
string studentName = "张三";
string teacheNname = "李四";
int studentAge = 18; 
int teacherAge = 48;

七、数据类型

在C++中,数据类型是指定变量或函数可以存储的数据的种类和范围的一种特定方式。C++提供了多种内置的数据类型,这些数据类型可以分为以下几类:

数据类型-整型

cpp 复制代码
//
// Created by wxj05 on 2024/7/13.
//
#include "iostream"
#include "windows.h"

using namespace std;

int main() {
    SetConsoleOutputCP(CP_UTF8);
    //类型:short、int、long、long long
    short num1 = 1;
    int num2 = 2;
    long num3 = 3;
    long long num4 = 4;
    cout << num1 << num2 << num3 << num4 << endl;

    //sizeof()函数,会告知数据所占用的字节数
    cout << "short" << sizeof(num1) << endl;
    cout << "int" << sizeof(num2) << endl;
    cout << "long" << sizeof(num3) << endl;
    cout << "long long" << sizeof(num4) << endl;
    return 0;
}

注:long类型在Windows系统中占4个字节,在linux系统重占8个字节。

快捷键:ctrl+alt+l,对代码进行格式化。

无符号和有符号数字

注:无符号类型的取值范围是大于0的部分。

数据类型-实型

注:实型数据没有singed和unsinged,默认全部有符号

c++中常量类型的确定

在c++中,对于常量类型的确定遵循最小原则

按照所书写的字面量的值,来确定类型

按照指定后缀确定

数据类型-字符型

cascii码表

char类型可存储内容:cascii码表

转义字符

转义字符:将普通的字符使用\作为开头,将其含义进行转换,对照得到ASCII表的控制字符功能。

常用的转义字符就这四种,其余的量力而行去记忆。

数据类型-字符串

C语言风格字符串

cpp 复制代码
char a[]="hello";//字符数组形式
char *b="hello"; //指针形式

c++风格字符串

cpp 复制代码
string c="hello";

注:字符数组的模式,不可更改变量值

字符串拼接

  1. 使用加号连接

注:该方法只适用于纯字符串的格式

  1. 使用to_string方法

数据类型-布尔型

八、cin

cin数据输入

cin会自动识别接收的变量类型,完成类型适配。

使用的时候符号一定不要用返了!!!

cin中文乱码解决

第一步:按住键盘ctrl+shift+alt+/

第二步:取消勾选

测试

注:使用SetConsoleOutputCP,只能解决cout输出乱码。

进行上述操作之后,cin,cout中的中文问题都会被解决。

九、运算符

1. 算术运算符

在C++中,算术运算符用于执行基本的数学运算,如加法、减法、乘法、除法等。

加法运算符 +:用于将两个操作数相加。

cpp 复制代码
int sum = 10 + 5;  // sum 等于 15

减法运算符 -:用于从左操作数中减去右操作数。

cpp 复制代码
int difference = 10 - 5; // difference 等于 5

乘法运算符 *:用于计算两个操作数的乘积。

cpp 复制代码
int product = 10 * 5; // product 等于 50

除法运算符 /:用于将左操作数除以右操作数,得到商。

cpp 复制代码
int quotient = 10 / 5; // quotient 等于 2

注:整数除法会向零取整,即舍弃小数部分。

取模运算符 %:用于获取左操作数除以右操作数的余数。

cpp 复制代码
int remainder = 10 % 3; // remainder 等于 1 (10 除以 3 的余数)

递增运算符 ++:用于增加操作数的值。

cpp 复制代码
int a = 5; a++; // 等同于 a = a + 1; 现在 a 等于 6

递减运算符 --:用于减少操作数的值。

cpp 复制代码
int b = 10; b--; // 等同于 b = b - 1; 现在 b 等于 9

2. 赋值运算符

在C++中,赋值运算符(Assignment Operators)用于将右侧的值赋给左侧的操作数。赋值运算符是编程中最基本和最常用的运算符之一,主要用于给变量赋值。

简单赋值运算符 =

cpp 复制代码
int x = 5; // 将整数值 5 赋给变量 x

这里,= 是简单的赋值运算符,用于将右侧的值(这里是 5)赋给左侧的变量 x

复合赋值运算符

加法赋值 +=

cpp 复制代码
int a = 10; a += 5; // 等同于 a = a + 5;

这将把 a 的值增加 5,结果 a 等于 15

减法赋值 -=

cpp 复制代码
int b = 20; b -= 3; // 等同于 b = b - 3;

这将从 b 的值中减去 3,结果 b 等于 17

乘法赋值 *=

cpp 复制代码
int c = 4; c *= 2; // 等同于 c = c * 2;

这将 c 的值乘以 2,结果 c 等于 8

除法赋值 /=

cpp 复制代码
int d = 15; d /= 3; // 等同于 d = d / 3;

这将 d 的值除以 3,结果 d 等于 5

取模赋值 %=

cpp 复制代码
int e = 17; e %= 4; // 等同于 e = e % 4;

这将 e 的值除以 4 并取余数,结果 e 等于 1

3. 比较运算符

在C++中,比较运算符用于比较两个值或表达式,并根据比较结果返回一个布尔值(truefalse)。

相等运算符 ==

检查左右操作数是否相等。

cpp 复制代码
int a = 5;
int b = 10;
bool isEqual = (a == b);  // isEqual 等于 false,因为 a 不等于 b

不等运算符 !=

检查左右操作数是否不相等。

cpp 复制代码
int a = 5;
int b = 10;
bool isNotEqual = (a != b);  // isNotEqual 等于 true,因为 a 不等于 b

大于运算符 >

检查左操作数是否大于右操作数。

cpp 复制代码
int a = 5;
int b = 10;
bool isGreater = (b > a);  // isGreater 等于 true,因为 b 大于 a

小于运算符 <

检查左操作数是否小于右操作数。

cpp 复制代码
int a = 5;
int b = 10;
bool isLess = (a < b);  // isLess 等于 true,因为 a 小于 b

大于等于运算符 >=

检查左操作数是否大于或等于右操作数。

cpp 复制代码
int a = 5;
int b = 10;
bool isGreaterOrEqual = (b >= a);  // isGreaterOrEqual 等于 true,因为 b 大于等于 a

小于等于运算符 <=

检查左操作数是否小于或等于右操作数。

cpp 复制代码
int a = 5;
int b = 10;
bool isLessOrEqual = (a <= b);  // isLessOrEqual 等于 true,因为 a 小于等于 b

4. 逻辑运算符

在C++中,逻辑运算符用于对布尔类型的操作数执行逻辑运算,并返回布尔值结果。

逻辑与运算符 &&

如果两个操作数都为 true,则返回 true;否则返回 false

cpp 复制代码
bool a = true;
bool b = false;
bool result = (a && b);  // result 等于 false,因为 b 是 false

逻辑或运算符 ||

如果至少有一个操作数为 true,则返回 true;如果两个操作数都是 false,则返回 false

cpp 复制代码
bool a = true;
bool b = false;
bool result = (a || b);  // result 等于 true,因为 a 是 true

逻辑非运算符 !

对操作数进行取反操作,如果操作数为 true,则返回 false;如果操作数为 false,则返回 true

cpp 复制代码
bool a = true;
bool result = !a;  // result 等于 false,因为 !true 是 false

5. 三元运算符

在C++中,三元运算符是一种特殊的条件运算符,也称为条件运算符(Conditional Operator)。它允许根据条件的真假选择不同的值。

cpp 复制代码
condition ? value_if_true : value_if_false
  • condition 是一个表达式,它的结果会被解释为布尔值(true 或 false)。
  • 如果 conditiontrue,则返回 value_if_true
  • 如果 conditionfalse,则返回 value_if_false

示例:

cpp 复制代码
int a = 5;
int b = 10;

// 使用三元运算符来比较 a 和 b 的大小
int max_value = (a > b) ? a : b;  // 因为 a 不大于 b,所以 max_value 等于 b,即 10

在上面的示例中,a > b 是条件表达式,如果条件为真,则选择 a 的值作为结果,否则选择 b 的值作为结果。

注意事项:

  • 三元运算符可以嵌套使用,但是需要注意代码可读性和复杂性。
  • 三元运算符在一些情况下可以使代码更简洁和清晰,特别是在赋值语句中,可以代替一些简单的 if-else 结构。
  • 尽管三元运算符具有简洁的语法,但过度使用可能会降低代码的可读性,因此应适度使用。
相关推荐
_.Switch23 分钟前
Python 自动化运维持续优化与性能调优
运维·开发语言·python·缓存·自动化·运维开发
徐*红23 分钟前
java 线程池
java·开发语言
尚学教辅学习资料23 分钟前
基于SSM的养老院管理系统+LW示例参考
java·开发语言·java毕设·养老院
1 9 J25 分钟前
Java 上机实践4(类与对象)
java·开发语言·算法
Code apprenticeship26 分钟前
Java面试题(2)
java·开发语言
J不A秃V头A29 分钟前
Python爬虫:获取国家货币编码、货币名称
开发语言·爬虫·python
懒惰的bit3 小时前
基础网络安全知识
学习·web安全·1024程序员节
SRY122404193 小时前
javaSE面试题
java·开发语言·面试
李元豪3 小时前
【智鹿空间】c++实现了一个简单的链表数据结构 MyList,其中包含基本的 Get 和 Modify 操作,
数据结构·c++·链表
无尽的大道3 小时前
Java 泛型详解:参数化类型的强大之处
java·开发语言