- 说在前面
- 数据类型
- 基本类型
- 声明及使用变量
- 类型转换
- 自动类型转换
- 强制类型转换
- 命名空间
变量 值可以改变的量(相对应的值不可变的量是常量,用const定义),是计算机中一块特定的内存空间,由一个或多个连续的字节组成,那么变量需要占多大的内存空间,那么就需要数据类型 来确定。
数据类型常量在定义时必须初始化,并且初始化之后不允许改变常量的值
如const int num = 1;
字面值常量,就是定义变量时,等号右边的值,可以是整型(以1-9开头默认十进制,以0开头默认八进制,以0x开头默认十六进制)、浮点型、字符型、字符串型等
基本类型 声明及使用变量整型从最小到最大依次是:bool
浮点型可以表示小数以及比整型表示值更大的数,分别是float、double和long double
- 变量名不要重复,同时变量名定义可以是大小写字母、数字以及下划线,并且第一个字符必须是字母或者下划线或者$,同时不能使用关键字来命名变量
- 一条语句可以声明多个类型相同的变量
- 声明变量并初始化也可以先声明后初始化
auto原本是C语言中的一个关键字,很少使用。C++11重新定义了auto的含义,让编译器能够根据初始值的类型推断变量的类型。在初始化声明中,如果使用auto关键字,而不指定变量的类型,编译器将把变量的类型设置成与初始值相同的类型。
声明并使用单精度浮点型变量
float 位数为32位,4个字节
#include//使用函数库进行计算 #define _USE_MATH_DEFINES #include using namespace std; int main() { float radius = 5; float height = 10; float volume; volume = M_PI * pow(radius, 2) * height; cout.precision(10); //设置打印数字的最大位数,可以用于观察精度 cout << fixed; //当打印的数字较大时,默认使用科学计数法进行显示,fixed强制展开显示 cout << scientific; //设置是用科学计数法显示 cout << volume << endl; }
声明并使用双精度浮点型变量
double 位数为64位,8个字节
#include//引入格式操作符库 #include using namespace std; int main() { //打印菜单 double price1 = 30.9; double price2 = 9.9; double price3 = 12.9; int count1 = 10; int count2 = 11; int count3 = 12; cout << fixed; // 以小数形式显示 cout.precision(2); //设置精度两位小数 cout << left; //左对齐 cout << "tt菜单" << endl; cout << "---------------------------------" << endl; cout << setw(16) << "菜名" << setw(8) << "价格" << setw(8) << "数量" << endl; cout << setw(16) << "红烧狮子头" << setw(8) << price1 << setw(8) << count1 << endl; cout << setw(16) << "热干面" << setw(8) << price2 << setw(8) << count2 << endl; cout << setw(16) << "西红柿炒蛋" << setw(8) << price3 << setw(8) << count3 << endl; }
使用格式操作符设置数值的输出格式
使用字符型变量
char 位数为8为,1个字节
#includeusing namespace std; int main() { //单引号中只能有一个字符,如果赋值多个字符,那么后面的字符会覆盖前面的字符 char c = 'a'; //根据补码反码原理,第一位是符号位,所以有+0和-0之分,-0作为-128 cout << CHAR_MAX << CHAR_MIN; cin >> c; //char其实是一种特殊的整型 //转大写,或者减空格 c = c - 32; cout << c << endl; }
使用字符串变量
#includeusing namespace std; int main() { string str1; //定义并初始化一个空字符串 str1 = "abc"; string str2(str1); //一种面向对象的写法,str2是str1的副本 string str3(8, '8'); //由8个连续的8组成 cout << str1 << "的长度为" << str1.size() << endl; cout << str2 << "的长度为" << str2.size() << endl; cout << str3 << "的长度为" << str3.size() << endl; cout << str1.empty() << endl;//判断是否为空 cout << str1[1] << endl;//输出字符串第二个元素 cout << str1 + str2 << endl;//拼接字符串 }
类型转换 自动类型转换ASCII码
原则: 把表示范围小的类型的值转换到表示范围大的类型的值。反之,会存在损失精度问题(如double转float,float转整型,较大值整型转换为较小值整型)。
自动转换场景
- 将一种算术类型的值赋给另一种算术类型的变量时,C++将对值进行转换;
- 表达式中包含不同的类型时;
- 将参数传递给函数时;
转换顺序
bool→char→short→int→long→long long float→double→long double强制类型转换
语法:(类型名)变量或数值;类型名(变量或数值)
命名空间以{}的方式初始化时进行转换(列表初始化),转换要求会更为严格,编译时会严格检查类型转换范围
命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的命名冲突。命名空间实际上就是一个程序设计者命名的内存空间,设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其他全局实体分隔开来。一般的使用规则:命名空间名::命名空间成员名。
#includeusing namespace std; namespace menu { string name = "酸辣土豆丝"; float price = 15; string desc = "微辣"; } int main() { cout << "菜名:" << menu::name << endl; }
标准命名空间std
标准C++库里的所有标识符都是在一个名为std的命名空间里定义的,或者标准头文件(如iostream)中函数、类、对象和类模板都是在命名空间std中定义的。这样,在程序中要使用std作为限定,using namespace std;



