C++ primer 基本语言

来源:互联网 发布:变老相机软件 编辑:程序博客网 时间:2024/06/08 04:33

变量和基本类型

c++定义了一组表示整数,浮点数,单个字符串和布尔值的算数类型
还有一种特殊的void 类型
表示整数,字符和布尔值的算术类型统称为整型

通常将8位的块作为一个字节,大多数计算机将存储器的每一个字节和一个称为地址的数关联起来

除了bool类型外,整型可以是带符号的和无符号的
整形int,long,short 默认都是带符号型的 定义无符号型的必须指定为unsigned long…
表示signed整型类型最常见的策略是其中一位作为符号位

关于越界
对于unsigned类型来说,编译器必须调整越界值,将该值对unsigned类型的可能取值数目求模,然后取所得值
对于负数,总是越界的,同上
一般的编译器对signed的处理方式和unsigned相同

浮点型

float,double,long double 分别是单精度浮点数,双精度浮点数,扩展精度浮点数
float类型只能保证6位有效数字,double至少可以保证10位有效数字,double类型精度代价相对于float可以忽略

两个相邻的仅由空格,制表符或换行符分开的字符串字面值可以连接成一个新的字符串字面值

在一行的末尾加一个反斜杠,可以将这一行和下一行当做同一行处理,反斜杠符号必须是该行尾字符,同理下一行行首的任何空格和制表符都是字符串字面值的一部分

变量
变量提供了程序可以操作的有名字的存储区,变量名必须以字母或者下划线开头
变量名一般用小写字母,如果有多个词,在每个词中间加下划线或者每一个内嵌的词的首字母大写

定义对象
每一个定义都以类型说明符开始,后面跟逗号分开的说明符列表,分号结束定义。类型说明符指定与对象相关联的类型
eg: int a ; std::string title ; Sales_item book;
int是内置类型,std::string 是标准库定义的类型 Sales_item 是自定义类型
变量定义指定了变量的类型和标识符,也可以提供初始值。
两种初始化形式:复制初始化,使用等号,直接初始化,使用括号,将初始化式放在括号中,直接初始化更灵活且效率更高

赋值和初始化不同,赋值是擦去对象当前的值用新的值代替,初始化是定义一个对象并对其赋值
每一个类都可能会定义一个或者几个特殊的成员函数,来定义如何初始化类类型的变量,这些成员函数叫做构造函数

初始化多个变量
可以使用前一个已经定义的变量的值来初始化后面的变量
对象可以用任意复杂的表达式来初始化

内置类型变量初始化
内置类型变量定义在函数体外,初始化为0,在函数体内,不进行自动初始化
未初始化的变量事实上都有一个值,所以建议每一个内置类型的对象都要初始化
类类型变量初始化
类一般都会有构造函数来控制类对象的初始化,如果没有定义构造函数,它会通过默认构造函数来实现,例如string类定义了默认构造函数初始化string变量为空字符串

声明和定义
程序中变量可以声明多次但定义只有一次
声明向程序表明变量的类型和名字,定义用于向变量分配存储空间,指定初始值,也是声明,声明了类型和名字
使用extern 关键字声明变量

名字的作用域
c++中大部分的作用域使用花括号来界定的
定义在所有函数外部的名字具有全局作用域,定义在函数内部的具有局部作用域,for语句中定义的变量,只能在for语句中使用,具有语句作用域
局部变量的定义会屏蔽全局变量的定义
放置声明有一个约束是,变量只有在从其定义处开始到放置声明的作用域的结束处才可以访问。必须在使用变量的最外层作用域里面或者之前定义变量。

定义const对象
可以定义一个对象为常量且不可被更改
常量在定义后就不可以更改了,所以定义的时候需要初始化
const int m=59; m是一个不可更改的常量
const 对象默认为文件的局部变量
在全局作用域定义非const变量时,它在整个程序中都可以访问,而在全局作用域定义的const变量是定义该对象的文件的局部变量,不能被其他文件访问,通过externa const定义就可以在整个程序中访问了

引用
引用是对象的另一个名字,引用是一种复合类型,通过在变量前加‘&’符号来定义
引用必须用与该引用同类型的对象来初始化,因为引用只是绑定在它引用变量的另一个名字,所有对引用的操作实际上都是对绑定的对象上
const 引用
const引用是指向const对象的引用

typedef 名字
typedef 定义以关键字typedef开始,后面是数据类型和标识符,标识符或类型名并没有引入新的类型,只是数据类型的同义词
可以定义类型的同义字,typedef int wage;
typedef名字可以用作类型说明符,wage i; //int i

枚举
枚举的定义包含关键字enum,其后是一个可选的枚举类型名,和一个用花括号括起来,有逗号分开的枚举成员列表
枚举成员是常量
默认第一个枚举成员赋值为0,依次增大
可以为枚举成员初始化赋值,赋值表达式必须是常量表达式
不能改变枚举成员的值
每一个enum都定义了一个新的类型,枚举类型的初始化或赋值只能通过枚举成员或者同一枚举类型的其他对象进行


每一个类都定义一个接口和一个实现
定义类时先定义该类的接口,即该类所提供的操作
类定义以关键字class 开始,其后是该类的名字标识符,类体位于花括号内,花括号后面必须跟一个分号。
类体定义了组成该类型的操作和数据,操作是类成员函数,数据是数据成员
定义变量和定义数据成员不同,定义数据成员时,只能指定该数据成员的名字和类型,构造函数控制他的初始化
类中public部分定义的成员在程序的任何部分都可以访问,一般把操作放在public部分
不是类的组成成员部分的代码不可以访问private成员
使用class 关键字定义的类,在第一个访问标号前任何成员都是private
使用struct 关键字,则都是public的
使用class 和struct 定义的区别只在于默认访问的级别,public或者private
头文件
头文件一般包含类的定义、externa变量的声明和函数的声明
头文件用于声明变量而不是定义变量
但头文件可以定义类,值在编译时就已知道的const对象和inline函数
在头文件中定义const对象,每个包含该头文件的源文件都有自己的const变量,其名称和值都一样
如果const 变量不是用常量表达式初始化,就不应该在头文件中定义
使用头文件,必须在源文件中 #include 该头文件
头文件定义的实体经常使用其他头文件的设施
预处理器变量经常用大写字母表示
#define 指示接受一个名字并定义该名字为预处理器变量
#ifndef 指示测定指定的预处理器变量是否存在,如果预处理器变量未定义,那么跟在其后的所有指示都会被处理,知道出现 #endif
头文件应该有保护符

#include 接受两种形式:
#include< standard_header >
#include “my_file.h”

原创粉丝点击