1.1.2 初识IO对象
表达式
cout << "hello" << endl;
中, cout为标准输入输出库<iostream>中的ostream类的一个对象。此处的操作数,操作符,操纵符等概念要明白。endl操纵符传给cout对象,使得设备缓冲区被刷新。
2. 变量和基本类型 - 2.3变量
了解C++中的基本内置类型(bool, int, float, double, char, long int等)及其存储空间;
整型与浮点型各自包含了哪些算术类型。
通常建议int32计算整型,double计算浮点运算。
只有内置类型存在字面值常量,如 true, 42, 3.1415926, "hello", 'x' .
以0开头的字面值常量表示8进制,0x则是16进制。以L结尾的表示long类型,U表示unsigned类型。
字面值为右值,不能出现在赋值语句的左边。
初始化、赋值、声明、定义的概念:
变量的定义:(必须)要有变量的类型和标识符,(可选)同时可以指定初始值;定义的同时为变量分配内存,如果没有指定初始值,将由系统进行初始化。
变量的声明:定义是声明的一种,还有另一种extern声明,不分配存储空间,只是说明变量定义在程序的其他地方。
注意:
- 函数内部定义的变量没有初始化值,函数外部定义的变量才有初始化值;
- 程序中变量可以声明多次,但只可以定义一次;
- extern声明在同时初始化时也是定义,但只能在函数外部才能如此;
- 多个文件共用一个变量,则有且仅有一个文件包含变量的定义,其他文件包含该变量的声明。
变量的作用域:全局作用域(函数外部定义的变量)、局部作用域(函数内部定义的)与语句作用域(如for语句中定义的)。不同作用范围的作用域可嵌套。(更复杂的还有类的作用域和命名空间作用域。)
2.4 const限定符
const对象用于表示常数:定义之后不能被修改;在定义时就需要被初始化。
如果非const变量在全局作用域中被定义,则在整个程序中都可以访问(默认为extern);
但const变量必须加extern关键字时,才能在整个程序中访问。否则只能在当前文件中被访问。
2.5 引用
无非就是某个对象的另一个名字!完全是相同的内存。
const 引用:可以读取但不能修改。
因此我们使用const引用作函数形参:
引用不必将实参再拷贝一次,节省了内存空间;而加const则保护了实参的值不被修改(如果要同时修改则不加const关键字)。需要注意的是,const int &a; 是指向const变量的引用(const int) &a; 而不是说这个引用本身是const的。在Python中,参数传递采用的是“传对象引用”的方式。这种方式相当于传值和传引用的一种综合。如果函数收到的是一个不可变对象(数字、字符或元组)的引用,就不能直接修改原始对象--相当于通过‘值传递’来传递对象。如果函数收到的是一个可变对象(字典、列表)的引用,就能修改对象的原始值--相当于‘传引用’来传递对象。
2.6 typedef 用于定义类型的同义词(通常是便于程序员使用)
struct Student { int a; }stu1;//stu1是一个变量 typedef struct Student2 { int a; }stu2, *stu_p;//stu2是一个结构体类型 = struct Student
// *stu_p 是指向结构体的指针
枚举
enum modes {open, close, disabled};
modes m = open;
关于类类型
花括号后要加分号 ; ;
类本身定义了其作用域;
注意,所有数据成员的初始化应该在构造函数中实现;
访问标号 public表示程序的任何部分可以访问,private表示只有在类内部的代码可以访问,
操作private内部的数据应通过成员;
使用struct关键字定义类:class关键字定义的类的成员缺省为private,struct则是public;
头文件中只声明不定义,除了类和const对象:
在头文件中我们不定义变量,如 int a; 主要是用来定义类;
另外,const变量默认是定义该变量的文件的局部变量,因此在头文件中定义并不会导致重复定义;而其他包含了这个.h文件的源文件都有相同的const变量;
const变量如果用常量表达式进行初始化,如 const float a = 1 + 2.1415926;
const float b = a+1;
1. 在编译阶段就能够计算出结果
2. 由于用常量表达式(通常是字面值)代替了const变量的使用,因此不占用任何存储空间(?变量、const变量、函数内部变量、字面值都保存在内存哪些位置?)
预处理器:利用预处理器变量(条件编译宏)避免多重包含
C++是一种静态类型语言,所有函数和变量必须在访问前声明或定义;