文章目录
- 简介
- C ++语言的特性
- C++ 开发环境配置
- C++ 变量,字面量和常量
- C++ 变量
- 变量命名规则
- C ++ 字面量
- C ++ 常量
- C++ 数据类型
- C ++基本数据类型
- 派生数据类型
- C++ 类型转换
- 隐式类型转换
- C ++显式转换
简介
C ++是一种静态类型的,自由形式的(通常)编译的,多范例的,通用的基于C的中级编程语言。它是由Bjarne Stroustrup
于1979年开发的
C ++语言的特性
-
速度
由于C ++是C的扩展版本,因此它的C部分非常底层。
这极大地提高了Python和Java等高级语言无法提供的速度。 -
静态类型
由于C ++是一种静态类型的编程语言,因此它不允许编译器对数据类型进行假设。例如,10与“ 10”不同,必须明确声明。
由于这些是在编译时确定的,因此有助于编译器在程序执行之前捕获错误和错误。 -
多范式编程语言
C ++支持至少7种不同的编程风格,并为开发人员提供了随意选择的自由。
与Java不同,除非必要,否则不需要使用对象来解决所有任务。 -
面向对象
C ++支持面向对象的程序设计,该程序为程序提供了清晰的模块化结构。
通过在C ++中使用它,可以通过创建对象将这些复杂的问题分成较小的集合。 -
标准库(标准模板库-STL)
可以使用C ++包含的标准库进一步扩展其使用。
这些库包含有效的算法,可以在编写自己的项目时广泛使用这些算法。可以节省大量的编程工作
C++ 开发环境配置
C++ 开发环境配置
C++ 变量,字面量和常量
C++ 变量
变量是用于保存数据的容器(存储区)
为了表示存储区域,应该为每个变量赋予唯一的名称(标识符)。例如:
int num = 20;
在这里,num是int数据类型的变量,我们为其分配了一个整数值20
注:int数据类型表明变量只能容纳整数。同样,如果必须存储小数和指数,则可以使用double数据类型。
变量的值可以更改,因此名称为variable(变量)。
int num = 20; //num 为 20
num = 50; //num 为 50
变量命名规则
-
变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成。
-
变量名不能以数字开头,第一个字母必须是字母或者下划线开头。。
-
变量名区分大小写。
-
变量名称不能是关键字,以免冲突。例如,int是用于表示整数的关键字。
-
变量名可以以下划线开头。但是,这不是一个好习惯。
注意:我们应该尝试给变量起有意义的名字。例如,first_name是比fn变量名更好。
C ++ 字面量
字面量是用于表示固定值的数据。可以直接在代码中使用。例如:1,2.5,‘c’ 等。
这里,1、2.5和“c”是字面量,因为不能给这些项赋不同的值。
这是C ++编程中不同字面量的列表。
- 整数字面量
整数是没有任何小数或指数部分的数字字面量(与数字关联)。C编程中有三种类型的整数字面量:
-
十进制(以10为底)
-
八进制(以8为底)
-
十六进制(以16为底)
例如:
十进制数: 0, -9, 22 etc
八进制数: 021, 077, 033 etc
十六进位制数: 0x7f, 0x2a, 0x521 etc
在C ++编程中,八进制以0开头,十六进制以0x开头。
- 浮点字面量
浮点字面量是具有分数形式或指数形式的数字字面量。例如:
-
-2.0
-
0.0000234
-
-0.22E-5
注意: E-5 = 10⁻⁵
-
字符字面量
通过将单个字符括在单引号内来创建字符字面量。例如:'a','m','F','2','}'
等。 -
转义符
有时,在C ++编程中必须使用不能键入或具有特殊含义的字符。例如,换行符(回车),制表符,问号等。
转义符 | 描述 |
---|---|
\b | 退格(BS) |
\f | 换页(FF) |
\n | 换行(LF) |
\r | 回车(CR |
\t | 水平制表(HT) |
\v | 垂直制表(VT) |
\ | 反斜杠 |
’ | 单引号字符 |
" | 双引号字符 |
? | 问号字 |
\0 | 空字符(NULL) |
- 字符串字面量
字符串字面量是用双引号引起来的一系列字符。例如:
“good” | 字符串常量 |
---|---|
“” | 空字符串常量 |
" " | 空格的字符串常量 |
“x” | 具有单个字符的字符串常量 |
“Earth is round\n” | 用换行符打印字符串 |
C ++ 常量
在C ++中,我们可以创建其值无法更改的变量。为此,我们使用const关键字来定义一个常量
const int LIGHT_SPEED = 299792458;
LIGHT_SPEED = 2500 // 错误! LIGHT_SPEED 是一个常量
使用了关键字const
来声明名为LIGHT_SPEED
的常量。如果尝试更改的值LIGHT_SPEED
,则会抛出错误消息
常量与字面量的主要区别在于,常量是一个变量,但它被定义为不可变。常量在定义时必须初始化,并且其值不能在之后更改。
字面量则是直接在代码中出现的数据值,不具备变量的特性,不能作为左值使用。
C++ 数据类型
C ++基本数据类型
类型 | 关键字 | 大小 |
---|---|---|
布尔型 | bool | 1字节 |
字符型 | char | 1字节 |
整型 | int | 4字节 |
浮点型 | float | 4字节 |
双浮点型 | double | 8字节 |
无类型 | void | 0字节 |
宽字符型 | wchar_t | 2字节 |
- C ++ int (整型)
- int关键字用来表示整数。
- 大小通常为4个字节。意思是,它可以存储从-2147483648 到 214748647的值。
int num = 90000;
- C ++float和double(浮点和双浮点型)
- float和double用于存储浮点数(小数和指数)。
- float的大小是4字节,double的大小是8字节。因此,double的精度是float的两倍。
float num = 99.99;
double num1 = 123.32213;
这两种数据类型也用于指数
double distance = 45E12 // 45E12 等于 45*10^12
- C ++ char(字符型)
- 关键字char用于字符。
- 大小是1个字节。
- C ++中的字符用单引号’ '引起来。
char test = 'h';
在C ++中,整数值存储在char变量中,而不是字符本身
在C++中,当你将一个整数值赋给一个char类型的变量时,实际上存储的是这个整数值的二进制表示,因为char类型通常是一个字节,可以存储一个8位的整数值。如果打印这个char变量,你会看到它显示的是这个整数值对应的ASCII字符
,这是因为在大多数环境中,char被当作字符类型来处理
char myChar = 65; // 65是大写字母A的ASCII值
在这个例子中,myChar实际上包含的是整数65的二进制表示,但当你打印它时,你会看到A,因为ASCII码将这个二进制表示解释为字符A
如果你想要直接访问存储的整数值,而不是它的ASCII字符表示,你可以强制将其转换为整数类型:
int intValue = static_cast<int>(myChar);
现在intValue将包含65。这种行为是因为整数和字符变量在内存中的存储方式不同,字符变量实际上存储的是代表字符的数字,而不是字符本身
- C ++ wchar_t (宽字符型)
- 宽字符wchar_t类似于char数据类型,不同之处在于它的大小是2个字节而不是1个字节。
- 它用于表示比char单个字符需要更多内存来表示它们的字符。
wchar_t test = L'ם' // 存储希伯来语字符
注意引号前的字母L。
注意:在C ++ 11中还引入了另外两个固定大小的字符类型char16_t和char32_t。
- C ++ bool (布尔型)
- bool数据类型有两个可能的值:true或false。
- 布尔用于条件语句和循环
bool answer = false;
- C ++ void(无类型)
-
void关键字表示不存在数据。这意味着“没有”或“没有值”。
-
使用函数和指针时,会使用到void。
注意:我们不能声明void类型的变量
派生数据类型
从基本数据类型派生的数据类型是派生类型。例如:数组,指针,函数类型,结构等。
C++ 类型转换
C ++允许将一种类型的数据转换为另一种类型的数据。这称为类型转换。
C ++中有两种类型的类型转换。
- 隐式转换
- 显式转换(也称为强制类型转换)
隐式类型转换
由编译器自动完成的类型转换称为隐式类型转换。这种类型的转换也称为自动转换。
举例:
- 从int转换为double
// 隐式类型转换的工作方式
#include <iostream>
using namespace std;
int main() {
// 为num_int分配一个int值
int num_int = 9;
// 声明一个double变量
double num_double;
// 隐式转换
// 将int值分配给double变量
num_double = num_int;
cout << "num_int = " << num_int << endl;
cout << "num_double = " << num_double << endl;
return 0;
}
输出结果
num_int = 9
num_double = 9
在程序中,已经将int数据分配给double变量。
num_double = num_int;
此处,在将int值分配给num_double变量之前,它会由编译器自动转换为double。 这是隐式类型转换的示例。
- 自动从double转换为int
//隐式类型转换的工作方式
#include <iostream>
using namespace std;
int main() {
int num_int;
double num_double = 9.99;
// 隐式转换
// 将一个double值赋给一个int变量
num_int = num_double;
cout << "num_int = " << num_int << endl;
cout << "num_double = " << num_double << endl;
return 0;
}
输出结果
在程序中,我们已将double数据分配给int变量。
num_double = num_int;
在此,将double值分配给num_int变量之前,编译器会自动将其转换为int。 这也是隐式类型转换的示例。
注意:由于int不能有小数部分,因此在上面的示例中,小数点后的数字被截断了。
C ++显式转换
当用户手动将数据从一种类型更改为另一种类型时,这称为显式转换。这种类型的转换也称为强制类型转换。
可以使用三种主要方法在C ++中使用显式转换。他们是:
- C型类型强制转换(也称为强制转换符号)
- C 风格转换
顾名思义,这种类型的转换受到C编程语言的青睐。也称为强制转换表示法。
语法是:
(data_type)expression;
比如
//C风格转换
//初始化int变量
int num_int = 25;
//声明double变量
double num_double;
//从int转换为double
num_double =(double) num_int;
- 函数表示法(也称为老式c++风格的类型转换)
- 函数样式转换
我们还可以使用类似符号的函数将数据从一种类型转换为另一种类型。
这种类型的语法是:
data_type(expression);
比如
//函数样式转换
int num_int = 25;
//声明double变量
double num_double;
//从int转换为double
num_double = double(num_int);
- 类型转换运算符
//类型转换
// 初始化double变量
double num_double = 3.56;
qDebug()<< "num_double = " << num_double ;
// 从double到int的C风格转换
int num_int1 = (int)num_double;
qDebug() << "num_int1 = " << num_int1 ;
// 从double到int的函数样式转换
int num_int2 = int(num_double);
qDebug() << "num_int2 = " << num_int2;
输出
使用C风格类型转换和函数样式转换进行类型转换,并显示结果。由于它们执行相同的任务,因此两者都给我们相同的输出。