1

刚开始掌握一门语言时,会使用一些基本的类型,进行一些常见的运算,而如果要写一些算法,比如数字累加和,计算面积,还需要使用到一些循环语句和条件判断,C++ 都提供了详细的规范。

类型

类型系统是语言的基石,C++ 的类型系统包括基本类型和混合类型。严格来说,课程中介绍了基本算术类型(arithmetic type),包括浮点类型,整数类型,布尔类型和字符类型。

整型细分有很多种,int 是最常用的整型,根据长度还分为 int, short int, long int, long long int, 根据是否有符号,又可以划分未 signed int unsigned int 等,因此共计8种类型, 有一些写法是等价的。

image-20200712172741023

浮点类型,主要为floatdouble long double,浮点都有符号。

布尔类型,就是bool

字符类型,主要为char,根据是否有符号,分为signed charunsigned char ,常用的共计两种,实际上还有宽字符。

通常,这些类型的长度在规范里没有规定,用 sizeof(类型)可以计算出来,且满足如下条件:

1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

变量

常量 和 变量 有了数据类型之后,就可以参与运算。变量是可以发生变化的值,常量是不可以变化的值。

变量需要通过类型 变量名进行声明,然后 最好进行初始化。例如 :

int a;
a = 3;

常量 是直接表示的值,不可以改变,比如

10,0xaa,077  //可以用多种进制的方式表示证书常量 
3.14 ,0.1E+2  //表示浮点数
true,false //表示bool
'a' 'b' '\n' //表示字符
“abcd" // c风格的字符串常量,隐含'\0'结尾,不推荐

常量也可以用符号常量来表示,就是给常量一个名称,方便使用

const double Pi = 3.1415926535;

运算

有了类型和变量,可以用一些运算符 进行运算,构成表达式或者语句。

和其他语言基本没有区别,常见算术运算是加减乘除取余和赋值,需要注意优先级,记不住优先级有歧义的时候就加括号。

逗号运算,就是把两个表达式,放在一条语句里执行,结果是第二个表达式。

a= 1+1,a*3 整个表达式的结果为6

关系运算,就是比较,逻辑运算,就是 与或非

sizeof运算,是表示某个类型所占的字节数:

sizeof(int)

运算的时候要注意优先级,和其他语言差不多。

类型转换,c++中两个不同类型的变量进行运算时,通常会进行隐式类型的转换,需要注意副作用。而如果进行显示类型的转换,通常有如下写法:

long b = 10l;
int a = (int) b
int a = int(b)
int a = static_cast<int> b

输入和输出

通常了解一门新语言,都要学标准输入和标准输出。写一个helloworld。标准输出可以用于调试,标准输入实践中不太常用。C++ 的输入和输出是面向对象的设计,把输入和输出的来源和目标设计为对象,通过 对象传输数据。其中内置了标准输入流对象 cin,和标准输出的流对象 cout ,类似于System.out, System.in 。并且这两个对象提供了插入操作符<< >>, 输出对象,而且可以进行链式操作。

cout << “Hello" << "world";
int a, b;
cin >> a >> b

等价于

System.out.print("Hello");
System.out.print("world");
int a, b;
Scanner scanner = new Scanner(System.in);
a = scanner.nextInt();
b = scanner.nextInt();

条件与循环

ifswitch 时最常用的条件语句

if ( a > b) {
    cout << a << endl;
}
switch(a) {
case 1: cout << "1"; break;
case 2: cout << "a"; break;
default:
    cout << "default";
}

常用的循环有三种while do while for

int i = 1;
while(i<=10) {
    cout << i << " ";
    i = i + 1;
}
int i = 1;
do {
    cout << i << " ";
    i = i + 1;
} while (i <= 10)
for (int i = 1 ; i <= 10; i++) {
    cout << i << " ";
}

这些循环和判断之间可以互相嵌套,通过continue 和 break 可以控制是否跳出或者继续循环

类型自定义

使用 typedefusing 可以自定义类型名称

typedef int MyInt;
using MyInt = int; 
MyInt a = 10;
MyInt a = MyInt(10);

可以定义枚举类型 enum,这个和c 或者 go的从差不多,枚举中的每个变量的值是int,会有一个名称,转字符串需要手动实现。还有一种限定作用范围的枚举(class enum)

enum Weekday {SUN=7,MON=1,TUE,WEB,THU,FRI,SAT};
enum Weekday a = TUE;
cout <<  int(a) << endl;

// 限定作用范围,使用枚举的时候要带上枚举类的名称
class enum Weekday {SUN=7,MON=1,TUE,WEB,THU,FRI,SAT};
enum Weekday a = Weekday::TUE;
cout <<  int(a) << endl;

auto 和 decltype 用于支持类型推导,通常我们说c++是强类型,赋值的时候不能像python一样自动推导,auto 就可以根据上下文自动推导类型。而decltype 可以根据变量类型进行推导。

int a = 1;
int b = 2;
auto  c = a + b; // 那么c的类型自动为 int

decltype(c) d; // 那么d的类型和c一样
 

综上所述,C++ 的基本类型有整型、浮点、布尔和字符,判断语句if,switch, 循环语句for,while,do while,并且支持枚举,自动类型(auto),并且可以使用内置的cincout 进行输入和输出。


程序员杰诺斯
15 声望1 粉丝