C++学习笔记
C++的特点
1.兼容C,支持面向过程的程序设计;
2.支持面向对象的方法;
3.支持泛型程序设计方法。
面向对象的基本概念
对象
1. 一般意义上的对象:现实世界中实际存在的事物。
2. 面向对象方法中的对象:程序中用来描述客观事物的实体。
抽象与分类
1. 分类依据的原则——抽象;
2. 抽象出同一类对象的共同属性和行为形成类;
3. 类与对象是类型与实例的关系。
封装
1.隐蔽对象的内部细节;
2.对外形成一个边界;
3.只保留有限的对外接口;
4.使用方便、安全性好。
继承
1.意义在于软件复用;
2.改造、扩展已有类形成新的类。
多态
1.同样的消息作用在不同对象上,可以引起不同的行为。
C++字符集和词法记号
命名空间
避免命名冲突
std是C++标准库的命名空间( namespace)名
using namespace std表示打开std命名空间
词法记号
1.关键字 C++预定义的单词
2.标识符 程序员声明的单词,它命名程序正文中的一些实体文字 在程序中直接使用符号表示的数据
3.分隔符() {} , : ; 用于分隔各个词法记号或程序正文
4.运算符(操作符) 用于实现各种运算的符号
5.空白符 空格、制表符(TAB键产生的字符)、垂直制表符、换行符、回车符和注释的总称
标识符的构成规则
1.以大写字母、小写字母或下划线(_)开始。
2.可以由以大写字母、小写字母、下划线(_)或数字0~9组成。
3.大写字母和小写字母代表不同的标识符。
4.不能是C++关键字或操作符。
基本数据类型、常量、变量
C++基本数据类型
- 整数类型
- 浮点数类型
- 字符类型
- 布尔类型
类型
1.整数符号分为(signed) 与 (unsigned),按照数据范围分为(short)(long)(long long)
2.浮点数分为(float)(double)(long double)
整数常量
十进制:数字部分不能以0开头
八进制:前面加0
十六进制:前加0x
后缀:后缀L或l表示类型至少是long,后缀为LL表示为long long,后缀U表示为unsigned.
浮点数常量
指数形式: 例如,0.345E+2,-34.4E-3; 整数部分和小数部分可以省略其一。
浮点常量 默认为double型,如果后缀F(或f)可以使其成为float型,例如:12.3
字符常量
单引号括起来的一个字符,如:'a'、'D'、'?'、'$';
C风格字符串常量
通过添加前缀可以改变字符常量或者字符串常量的类型,前缀及其含义如下表所示:
变量
变量定义:数据类型 变量名1, 变量名2, ..., 变量名n;
初始化:
1.int a = 0;
2.int a(0);
3.int a = {0};
4.int a{0};
其中使用大括号的初始化方式称为列表初始化,列表初始化时不允许信息的丢失。例如用double值初始化int变量,就会造成数据丢失。
符号常量
常量定义语句的形式为:
const 数据类型说明符 常量名=常量值;
或:
数据类型说明符 const 常量名=常量值;
例如,可以定义一个代表圆周率的符号常量:
const float PI = 3.1415926;
符号常量在定义时一定要初始化,在程序中间不能改变其值。
逗号运算、关系运算、逻辑运算和条件运算
逗号运算和逗号表达式
格式
表达式1,表达式2
求解顺序及结果
先求解表达式1,再求解表达式2, 最终结果为表达式2的值
例:
a= 3*5, a*4最终结果为60
关系运算与关系表达式
关系运算是比较简单的一种逻辑运算,优先次序为:
逻辑运算与逻辑表达式
逻辑运算符
!(非) &&(与) ||(或)
优先次序: 高 → 低
条件运算符与条件表达式
一般形式
表达式1?表达式2:表达式3
(表达式1必须是bool类型)
执行顺序
先求解表达式1,若表达式1的值为true,则求解表达式2,表达式2的值为最终结果若表达式1的值为false,则求解表达式3,表达式3的值为最终结果
条件运算符优先级高于赋值运算符,低于逻辑运算符
例
Sizeof运算
语法形式
sizeof (类型名) 或 sizeof 表达式
结果值:
“类型名”所指定的类型,或“表达式”的结果类型所占的字节数。
例:
sizeof(short)
sizeof x
位运算
位与(&)
将某一位置0,其他位不变。
例如:将char型变量a的最低位置0: a = a & 0xfe; ;(0xfe:1111 1110)n
取指定位。
例如:有char c; int a; 取出a的低字节,置于c中:c=a & 0xff; (0xff:1111 1111)
位或(|)
将某些位置1,其他位不变。
例如:将 int 型变量 a 的低字节置 1 :a = a | 0xff;
位异或(^)
使特定位翻转(与0异或保持原值,与1异或取反)
例如:要使 01111010 低四位翻转:01111010^00001111=01110101
运算优先级
优先级 | 运算符 | 结合性 |
---|---|---|
1 | [ ] ( ) . –> 后置 ++ 后置 –– | 左→右 |
2 | 前置 ++ 前置 – – sizeof & * +(正号) –(负号) ~ ! | 右→左 |
3 | (强制转换类型) | 右→左 |
4 | .* 和 ->* | 左→右 |
5 | * / % | 左→右 |
6 | + – | 左→右 |
7 | << >> | 左→右 |
8 | < > <= >= | 左→右 |
9 | == != | 左→右 |
10 | & | 左→右 |
11 | ^ | 左→右 |
12 | | | 左→右 |
13 | && | 左→右 |
14 | || | 左→右 |
15 | ? : | 右→左 |
16 | = *= /= %= += –= <<= >>=&= ^= |= | 右→左 |
17 | , | 左→右 |
混合运算时数据类型的转换
1.一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。
2.在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据。
1.将一个非布尔类型的算术值赋给布尔类型时,算术值为0则结果为false,否则结果为true。
2.将一个布尔值赋给非布尔类型时,布尔值为false则结果为0,布尔值为true则结果为1
3.将一个浮点数赋给整数类型时,结果值将只保留浮点数中的整数部分,小数部分将丢失。
4.将一个整数值赋给浮点类型时,小数部分记为0。如果整数所占的空间超过了浮点类型的容量,精度可能有损失。
混合运算时数据类型的转换——显式转换
显式类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。
语法形式
类型说明符(表达式)
(类型说明符)表达式
类型转换操作符<类型说明符>(表达式)
类型转换操作符可以是:
const_cast、dynamic_cast、reinterpret_cast、static_castl
例:int(z), (int)z, static_cast<int>(z)
三种完全等价
数据的输入输出
I/O流
在C++中,将数据从一个对象到另一个对象的流动抽象为“流”。流在使用前要被建立,使用后要被删除。
数据的输入与输出是通过I/O流来实现的,cin和cout是预定义的流类对象。cin用来处理标准输入,即键盘输入。cout用来处理标准输出,即屏幕输出。
从流中获取数据的操作称为提取操作,向流中添加数据的操作称为插入操作。
预定义的插入符和提取符
<<”是预定义的插入符,作用在流类对象cout上便可以实现项标准输出设备输出。
cout<< 表达式 << 表达式...
标准输入是将提取符作用在流类对象cin上。
cin>> 表达式 >> 表达式
提取符可以连续写多个,每个后面跟一个表达式,该表达式通常是用于存放输入值的变量。例如:
int a, b;
cin>> a >> b;