2.C++基础知识
2.1变量、常量和赋值
变量
- C++也使用变量的编程构造来命名和储存数据,变量容纳的数据成为这个变量的值
- 编译器将内存位置分配给程序的每一个变量名,我们可以简单的认为内存位置就是用变量名做标签
- 变量(或者在程序中定义的其他项目)的名称叫标识符,标识符必须字母或下划线开头,后续每个字符只能是字母、数字、或下划线
- 计算机用不同的编码方式编码不同类型变量,声明变量就是告诉编译器两点,一、应该给一个变量分配多大的内存空间,二、用哪种编码方式将变量的值表示成一串0和1
常量
常量是固定值,在程序执行期间不会改变
- 整数常量:整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制
- 浮点常量:浮点常量由整数部分、小数点、小数部分和指数部分组成。
- 布尔常量:由两个标准的C++关键字组成,true和false
- 字符常量:由单引号括住的字符,如'a','b',还有转义字符序列'\n','\t'等等
- 字符串常量:由双引号括住,如:"hello"等等
- 定义常量方法:两种方法1.使用#define预处理器 2.使用const关键字
修饰符类型
- signed
- unsigned
- long
- short
- const
赋值语句
C++中还有一种不同的初始化语法,称为“构造函数语法”
例:
double rate(0.07),time,balance(0.0);
这是因为:以运算符(=)进行初始化这个操作系衍袭自C语言。如果对象属于内建型别,或者对象可以单一值加以初始化,这种方式就没有问题,例如:
string name = “Fibonacci”;
但是对象需要多个初始值,这种方式就没办法完成任务了。以标准库中的复数(complex number)类为例,它需要两个初始值,一个是实部,一个是虚部。以下就是用来处理“多值初始化”的构造函数初始化语法:
#include <complex>
complex<double> purei(0, 7);
小数点后位数控制
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
图例为保留两位小数,改变(2)的数字即可改变小数位数
2.2输入和输出
输入流是提供计算机并有程序使用的一系列输入。“流”表明程序将以相同的方式处理所有输入,无论这些输入从何而来。输出流同样如此,是程序生成的一系列输出。
-
<<符号是插入运算符
using namespace std;
特定的using指令表明程序准备会用std命名空间。命名空间不是一个名称集合,它代表了一个C++代码主体,其中指定了某些名称的含义,命名空间的作用是将所有C++名称规范划分成不同的集合(称为命名空间),使用命名空间的每一个名称都有一个“规范”(一个定义),命名空间对名称进行划分,但和那些命名空间配合的还有大量的C++代码
2.3 数据类型
基本内置类型
类型 | 关键字 |
---|---|
布尔型 | bool |
字符型 | char |
整型 | int |
浮点型 | float |
双浮点型 | double |
无类型 | void |
宽字符型 | wchar_t |
C++也允许定义其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等等
typedef声明
可以使用typedef为一个已有的累死你个去一个新的名字,例如下面语句会告诉编译器,feet是int的另一个名称:
typedef int feet;
枚举类型
枚举类型:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
定义格式:
enum <类型名> {<枚举常量表>};
应用举例:
enum color_set1 {RED, BLUE, WHITE, BLACK}; // 定义枚举类型color_set1
enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 定义枚举类型week
enum Weekday{SUN,MON,TUE,WED,THU,FRI,SAT};//定义枚举类型weekday
//SUN=0,MON=1,依次为0,1,2,3.....
sring类
C++缺乏原生数据类型来直接操作字符串,但在string类的帮助下,可以声明一个string类型的变量来进行操作
用cin将数据读入字符串,在两个字符串之间可以用“+”符号可将两个字符串连接成一个更长的。
例如:
string day,day1,day2;
day1="Monday";
day2="Tuesday";
day=day1+day2;
会连接成以下字符串:
"MondayTuesday"
array(数组)和vector(向量)
-
要定义array,我们必须指定array的尺度大小——即array所能储存的元素个数。array的尺度必须是一个常量表达式,也就是一个不需要再执行期计算其值的表达式。例如:
int pell_seq[18];
-
至于定义vector object,我们首先必须含入vector头文件。vector是个class template(类模板),所以我们必须在类名称之后的角括号内指定其元素型别,其尺度则写在小括号中:此处所给出的尺度并不一定得是个常量表达式例如:
include <vector>
vector<int> pell_seq(seq_size);
引用
引用是隐式的指针,引用就是给一个变量起一个别名,格式为 数据类型 & 引用名 = 变量名;
这里的&并不是取地址符号,而是起标识作用,引用声明之后,相当于目标变量有两个名称
int a = 10;
int &b = a;
对a与b进行操作,都会改变内存中的数据。
注意:
- 引用在定义时必须初始化,如int &b;语句是错误的
- 引用在初始是只能绑定左值,不能绑定常量,如int &b = 10;是错误的
- 引用一旦初始化,其值就不能更改,即不能再做别的变量的引用
- 数组不能定义引用,因为数组是一组数据,不能定义其别名
指针与引用的区别
指针是一种数据类型而引用不是,指针可以转换为它所指向的变量的数据类型,如下:
int a = 10;
int *p = &a;
double *pd = (double*)p;
经过转换,pd指针就可以指向double类型数据,而引用则必须要和目标变量的数据类型相同,无法进行数据类型转换。
2.4运算符
算数运算符
+、-、*、/、%、++、--
关系运算符
==、!=、>、<、>=、<=
逻辑运算符
&&、||、!
位运算符
&、|、^的真值表:
p | q | p&q | plq | p^q |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
赋值运算符
=、+=、-=、*=、/=、%=
杂项运算符
运算符 | 描述 |
---|---|
sizeof | sizeof 运算符返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。 |
Condition ? X : Y | 条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。 |
, | 逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。 |
. | (点)和 ->(箭头) 成员运算符用于引用类、结构和共用体的成员。 |
Cast | 强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。 |
& | 指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。 |
* | 指针运算符 * 指向一个变量。例如,*var; 将指向变量 var。 |