c++回忆1—《C++大学教程》

1、存储类

4个存储类说明符:auto、register、extern、static。标识符的存储类说明符可以确定其存储类、范围和连接。

分两类:

自动存储类——auto和register。

只有变量能作为自动存储类,函数的局部变量和参数通常都是自动存储类。局部变量默认为自动存储类。

静态存储类——extern和static。

这两个关键字用来声明静态存储类变量和函数的标识符。这种变量从程序开始执行时就存在。对于变量,程序开始执行时就分配和初始化存储空间;对于函数,从程序开始执行时就存在函数名。

全局变量和函数名默认为extern。用static声明的局部变量仍然只在定义该变量的函数中使用,但与自动存储类变量不同的是,static局部变量在函数退出时保持其数值。下次调用这个函数时,static局部变量包含上次函数退出时的值。注:所有静态存储类的数字变量都默认初始化为0。

全局变量能够被同一个文件中该变量声明后的所有函数访问。其他文件中的函数也可以访问全局变量,但必须在使用前予以声明,如在一个文件中定义:

int flag;

则在另一个文件中需定义如下:

extern int flag;

才可使用全局变量flag。

说明:存储类别说明符extern告诉编译器:变量flag或者稍后定义在同一个文件中,或者在另一个文件中定义。而编译器不知道flag定义在何处,因此让连接程序查找flag,如果没有找到flag的定义,则发出错误消息,如找到,则指明其位置,从而解决对该变量的引用。对于函数的引用也是如此。可以用static关键字来防止定义在其他文件中的函数(没有在同一个文件中定义)使用这些全局变量或函数。

2、enum的声明

enum Status(CONTINUE,WON,LOST);

Status gameStatus;

默认枚举常量(CONTINUE,WON,LOST)从0开始,增量为1。

enum Months(JAN=1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC);

也可指定从某个常数开始,如上例从1开始,增量为1。

3、默认参数

必须是函数参数表中最右边的参数。

int fun1(int,int=1,int=2); //正确

int fun2(int=1,int); //错误

默认参数应在函数名第一次出现是指定,通常在函数原型中。

4、一元作用域运算符 :: 可以在同名局部变量的作用域中访问全局变量。

5、函数重载

通过函数签名(函数名和参数类型的组合,包括参数个数,类型,顺序)来区别。编译器用参数个数和类型为每个重载函数编码(名字改编或名字修饰)。

6、数组

如果初始化的元素比数组中的元素少,则其余元素自动初始化为0。所以至少需要初始化第一个元素,才能将其余元素自动初始化为0。但是,如果声明为static数组,则在没有显式初始化时,便以其将自动初始化为0。

数组维数只能用常量声明,无论是静态数组还是自动数组。

字符数组可以用字符串直接量(注:字符串直接量返回指向第一个字符的指针)初始化。

char string1[ ]= " first " ;

字符串 " first " 包含五个字符加一个特殊字符串终止符 ' /0 ' 。故string1的长度为6。

将数组传递给函数:

原型:

void modifyArray(int[ ] , int );

void modigyArray(int anyArrayName[ ], int anyVariableName);

C++编译器将忽略原型中的变量名,上述两种原型声明等价。

7、指针

int a;

int *aPtr = &a ;

则&*aPtr和*&aPtr将返回相同的值,即为aPtr的值,可知&和*运算符是互逆的。

声明为const的指针应在声明时初始化(如果是函数参数,则用传入函数的指针初始化)。

结构(类)总是按值调用,传递整个结构(类)的副本。

数组总是按引用调用,数组名就是数组第一个元素的地址。

sizeof运算符作用于数组名时,返回数组总共占用的字节数。

double realArray[22];

sizeof realArray /sizeof(double); //返回22

char* suit[4]={" Hearts ", " Diamonds ", " Clubs ", " spades "};

suit中的数组元素存放每个字符串的首字母的地址,因此suit是定长的。

所以sizeof suit将返回16(如果单个地址占用4字节)。

8、函数指针

函数指针包含函数在内存中的地址。

将函数指针传给函数:

原型:

void bubble( int[ ], const int, int ( * ) ( int, int ) );

上述第三个参数即为函数指针类型。

看函数定义:

void bubble( int work[ ], const int size, int ( * compare ) ( int, int ) )

{

    ( * compare) ( a, b); //a,b为两个int型的参数

或者

    compare( a, b); //a,b为两个int型的参数

}

推荐使用第一种形式,因它显示说明compare为函数指针,第二种形式容易认为compare是个实际函数。

函数指针数组声明如下:

void ( * f[ 3 ] )( int )={function1,function2,function3};

上式声明具3个函数指针的数组f。

函数调用如下:

(* f[0])(a);  //a为int型参数

9、构造函数与析构函数

一般情况下,析构函数的调用顺序与构造函数相反。

全局范围中定义的对象的构造函数在文件中的任何其他函数(包括main)执行之前调用(但不同文件之间全局对象构造函数的执行顺序是不确定的)。当main终止或者调用exit函数时调用相应的析构函数。

当程序执行到对象定义时,调用自动局部对象的构造函数。该对象的析构函数在对象离开范围时调用(即离开定义对象的块时)。自动对象的构造函数和析构函数在每次对象进入和离开范围时调用。

static局部对象的构造函数旨在程序执行首次到达对象定义时调用一次,对应的析构函数在main终止或调用exit函数时调用。

可见构造函数调用顺序:

全局对象-〉局部自动(或静态)对象(按执行顺序)。

析构函数调用顺序:

局部自动对象-〉main( )执行结束后,静态对象(局部或全局)-〉全局对象。

10、关于成员函数返回引用

不要让类的public成员函数返回对该类private数据成员的非const引用(或指针),返回这种引用会破坏封装。

如:

#include<iostream>
using namespace std;

class Time
{
public:
 int getHour();
 int &badSetHour(int);
private:
 int hour;
 int minute;
 int second;
};

int Time::getHour()
{
 return hour;
}

int &Time::badSetHour(int hh)
{
 hour=(hh >= 0 && hh < 24 ) ? hh : 0;
 return hour;
}

int main()
{
 Time t;
 int &hourRef=t.badSetHour(20);
 cout<<hourRef<<endl;

 hourRef=8;
 cout<<t.getHour()<<endl;
 
 t.badSetHour(12) = 5;
 cout<<t.getHour()<<endl;
 
 return 0;
}

输出为:

20

8

5

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章 计算机与C++编程简介 1.1 简介 1.2 什么是计算机 1.3 计算机组成 1.4 操作系统的变革 I.5 个人计算、分布式计算与客户/a匠务器计算 l. 6 机器语言、汇编语言和高级语言 1.7 C语言与C++的历史 1.8 C++标准库 1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 1.15 简单程序:打印一行文本 1.16 简单程序:两个整数相加 1.17 内存的概念 1.18 算术运算 1.19 判断:相等与关系运算符 1.20 新型头文件与名字空间 1.21 有关对象的思考 小结 术语 自测练习 自测练习答案 练习 第2章 控制结构 2.1 简介 2.2 算法 2.3 伪代码 2.4 控制结构 2.5 if选择结构 2.6 if/e1se选择结构 2.7 while重复结构 2.8 构造算法:实例研究1(计数器控制重复) 2.9 构造算法与自上而下逐步完善:实例研究2(标记控制重复) 2.10 构造算法与自上而下逐步完善:实例研究3(嵌套控制结构) 2.11 赋值运算符 2.12 自增和自减运算符 2.13 计数器控制循环的要点 2.14 for重复结构 2.15 for结构使用举例 2.16 switch多项选择结构 2.17 do/while重复结构 2.18 break和continue语句 2.19 逻辑运算符 2.20 混淆相等(.==)与赋值(=)运算符 2.21 结构化编程小结 2.22 有关对象的思考:确定问题中的对象 小结 术语 自测练习 自测练习答案 练习 第3章 函数 3.1 简介 3.2 C++程序组件 3.3 数学函数库 3.4 函数 3.5 函数定义 3.6 函数原型 3.7 头文件 3.8 随机数产生器 3.9 案例:机会游戏与enum简介 3.10 存储类 3.11 作用域规则 3.12 递归 3.13 使用递归举例:Fibonacci数列 3.14 递归与迭代 3.15 带空参数表的函数 3.16 内联函数 3.17 引用与引用参数 3.18 默认参数 3.19 一元作用域运算符 3.20 函数重载 3.21 函数模板 3.22 有关对象的思考:确定对象属性 小结 术语 自测练习 自测练习答案 练习 第4章 数组 4.1 简介 4.2 数组 4.3 声明数组 4.4 使用数组的举例 4.5 将数组传递给函数 4.6 排序数组 4.7 实例研究:用数组计算平均值、中数和模 4.8 查找数组:线性查找与折半查找 4.9 多下标数组 4.10 有关对象的思考:确定类的行为 小结 术语 自测练习 自测练习答案 练习 递归练习 第5章 指针字符串 5.1 简介 5.2 指针变量的声明与初始化 5.3 指针运算符 5.4 按引用调用函数 5.5 指针与常量限定符 5.6 按引用调用的冒泡排序 5.7 指针表达式与指针算法 5.8 指针数组的关系 5.9 指针数组 5.10 实例研究:洗牌与发牌 5.11 函数指针 5.12 字符字符串处理简介 5.12.1 字符字符串基础 5.12.2 字符串处理库的字符串操作函数 5.13 有关对象的思考:对象间的交互 小结 术语 自测练习 自测练习答案 练习 特殊小节:建立自己的计算机 更多的指针练习 字符串操作练习 特殊小节:高级字符串操作练习 复杂字符串操作练习 第6章 类与数据抽象(一) 6.1 简介 6.2 结构定义 6.3 访问结构成员 6.4 用struct实现用户自定义类型Time 6.5 用类实现Time抽象数据类型 6.6 类范围与访问类成员 6.7 接口与实现方法的分离 6.8 控制对成员的访问 6.9 访问函数与工具函数 6.10 初始化类对象:构造函数 6.11 在构造函数中使用默认参数 6.12 使用析构函数 6.13 何时调用构造函数与析构函数 6.14 使用数据成员和成员函数 6.15 微妙的陷阱:返回对Private数据成员的引用 6.16 通过默认的成员复制进行赋值 6.17 软件复用性 6.18 有关对象的思考:编写电梯模拟程序的类 小结 术语 自测练习 自测练习答案 练习 第7章 类与数据抽象(二) 7. 1 简介 7.2 const(常量)对象与const成员函数 7.3 复合:把对象作为类成员 7.4 友元函数与友元类 7.5 使用this指针 7.6 动态内存分配与new和delete运算符 7.7 static类成员 7.8 数据抽象与信息隐藏 7.8.1 范例:数组抽象数据类型 7.8.2 范例:字符串抽象数据类型 7.8.3 范例:队列抽象数据类型 7.9 容器类与迭代 7.10 代理类 7.11 有关对象的思考:在电梯模拟程序中使用复合和动态对象管理 小结 术语 自测练习 自测练习答案 练习 第8章 运算符重载 8.1 简介 8.2 运算符重载的基础 8.3 运算符重载的限制 8.4 用作类成员与友元函数的运算符函数 8.5 重载流插入与流读取运算符 8.6 重载一元运算符 8.7 重载二元运算符 8.8 实例研究:Array类 8.9 类型之间的转换 8.10 实例研究:String类 8.11 重载十十与—— 8.12 实例研究:Date类 小结 术语 自测练习 自测练习答案 练习 第9章 继承 9.1 简介 9.2 继承:基类和派生类 9.3 Protected成员 9.4 把基类指针强制转换为派生类指针 9.5 使用成员函数 9.6 在派生类中重定义基类成员 9.7 Public、Protected和Private继承 9.8 直接基类和间接基类 9.9 在派生类中使用构造函数和析构函数 9.10 将派生类对象隐式转换为基类对象 9.11 关于继承的软件工程 9.12 复合与继承的比较 9.13 对象的“使用”关系和“知道”关系 9.14 实例研究:类Point、CircIe和Cylinder 9.15 多重继承 小结 术语 自测练习 自测练习答案 练习 第10章 虚函数和多态性 10.1 简介 10.2 类型域和switch语句 10.3 虚函数 10.4 抽象基类和具体类 10.5 多态性 10.6 实例研究:利用多态性的工资单系统 10.7 新类和动态关联 10.8 虚析构函数 10.9 实例研究:继承接口和实现 10.10 多态、虚函数和动态关联 小结 术语 自测练习 自测练习答案 练习 第11章 C++输入/输出流 11.1 简介 11.2 流 11.2.1 iosbeam类库的头文件 11.2.2 输入/输出流类和对象 11.3 输出流 11.3.1 流插入运算符 11.3. 2 连续使用流插入/流读取运算符 11.3.3 输出char类型的变量 11.3.4 用成员函数put输出字符和put函数的连续调用 11.4 输入流 11.4.1 流读取运算符 11.4.2 成员函数get和getline 11.4.3 istream类中的其他成员函数(Peek、Putback和ignore) 11.4.4 类型安全的I/0 11.5 成员函数read、gcount和write的无格式输人/输出 11.6 流操纵算子 11.6.1 整数流的基数:流操纵算子dec、oct、hex和setbase 11.6.2 设置浮点数精度(Precision、setprecision) 11.6.3 设置域宽(setw、width) 11.6.4 用户自定义的流操纵算子 11.7 流格式状态 11.7.1 格式状态标志 11.7.2 尾数零和十进制小数点(ios:showpoint) 11.7.3 对齐(ios::left、ios::right、ios::internal) 11.7.4 设置填充字符(fill、setfill) 11.7.5 整数流的基数:(ios::dec、ios::oct、ios::hex、ios::showbase) 11. 7.6 浮点数和科学记数法(ios::scientific、ios::fixed) 11.7.7 大/小写控制(ios:uppercase) 11.7.8 设置及清除格式标志(flags、setiosflags、resetiosflags) 11.8 流误状态 11.9 把输出流连到输入流上 小结 术语 自测练习 自测练习答案 练习 第12章 模板 12.1 简介 12.2 函数模板 12.3 重载模板函数 12.4 类模板 12.5 类模板与非类型参数 12.6 模板与继承 12.7 模板与友元 12.8 模板与static成员 小结 术语 自测练习 自测练习答案 练习 第13章 异常处理 13.1 简介 13.2 何时使用异常处理 13.3 其他误处理方法 13.4 C十十异常处理基础:try、throw、catch 13.5 简单异常处理例子:除数为o 13.6 抛出异常 13.7 捕获异常 13.8 再抛出异常 13.9 异常指定 13.10 处理意外异常 13.11 堆栈解退 13.12 构造函数、析构函数与异常处理 13.13 异常与继承 13.14 处理new故障 13.15 auto_ptr类与动态内存分配 13.16 标准库异常层次 小结 术语 自测练习 自测练习答案 练习 第14章 文件处理 14.1 简介 14.2 数据的层次 14.3 文件和流 14.4 建立顺序访问文件 14.5 读取顺序访问文件中的数据 14.6 更新顺序访问文件 14.7 随机访问文件 14.8 建立随机访问文件 14.9 向随机访问文件中随机地写入数据 14.10 从随机访问文件中顺序地读取数据 14.11 实例研究:事务处理程序 14.12 对象的输入/输出 小结 术语 自测练习 自测练习答案 练习 第15章 数据结构 15.1 简介 15.2 自引用类 15.3 动态内存分配 15.4 链表 15.5 堆栈 15.6 队列 15.7 树 小结 术语 自测练习 自测练习答案 练习 特殊小节:建立自己的编译器 第16章 位、字符字符串和结构 16.1 简介 16.2 结构的定义 16.3 结构的初始化 16.4 函数和结构 16.5 类型定义:typedef 16. 6 范例:高效的洗牌和发牌模拟程序 16.7 位运算符 16.8 位段 16.9 字符处理库 16.10 字符串转换函数 16.11 字符串处理库中的查找函数 16.12 字符串处理库中的内存函数 16.13 字符串处理库中的其他函数 小结 术语 自测练习 自测练习答案 练习 第17章 预处理器 17.1 简介 17.2 预处理指令#include 17.3 预处理指令#define:符号常量 17.4 预处理指令#define:宏 17.5 条件编译 17.6 预处理指令#error和#pragma 17.7 运算符#和## 17.8 行号 17.9 预定义的符号常量 17.10 断言(宏assert) 小结 术语 自测练习 自测练习答案 练习 第18章 C语言遗留代码问题 18.1 简介 18.2 UNIX和DOS系统中的输入/输出重定向 18.3 变长参数表 18.4 使用命令行参数 18.5 对编译多个源文件程序的说明 18. 6 用edt和atexit终止程序的执行 18.7 volatile类型限定符 18.8 整数和浮点数常量的后缀 18.9 信号处理 18.10 动态内存分配:函数calloc和realloc 18.11 无条件转移:goto语句 18.12 联合体 18.13 连接指定 小结 术语 自测练习 自测练习答案 练习 第19章 string类与字符串流处理 19.1 简介 19.2 string的赋值与连接 19.3 比较string 19.4 子串 19.5 交换string 19.6 string的特性 19.7 寻找string中的字符 19.8 替换string中的字符 19.9 在string中插入字符 19.10 转换成C语言式char 字符串 19.11 迭代器 19.12 字符串流处理 小结 术语 自测练习 自测练习答案 练习 第20章 标准模板库(STL) 20.1 标准模板库(STL)简介 20.1.1 容器简介 20.1.2 迭代器简介 20.1.3 算法简介 20.2 顺序容器 20.2.1 vector顺序容器 20.2.2 1ist顺序容器 20.2.3 deque顺序容器 20.3 关联容器 20.3.1 multiset关联容器 20. 3.2 set关联容器 20.3.3 mdtimap关联容器 20.3.4 map关联容器 20.4 容器适配器 20.4.1 stack适配器 20.4.2 queue适配器 20.4.3 Priority_queue适配器 20.5 算法 20.5.1 fill、fill_n、generate与generate_n 20.5.2 equal、mismatch和1exicographical_compare 20.5.3 remove、remove_if、 remove_copy和remove_copy_if 20.5.4 replace、replace_if、replace_copy和replace_copy_if 20.5.5 数学算法 20.5.6 基本查找与排序算法 20.5.7 swap、iter_swap和swap_ranges 20.5.8 copy—backward、 merge、 unique和reverse 20.5.9 inplace_merge、 unique—copy和reverse—copy 20.5.10 集合操作 20.5.11 1ower—bound、 upper—bound和equal_range 20.5.12 堆排序 20.5.13 min和max 20.5.14 本章未介绍的算法 20.6 bitset类 20.7 函数对象 小结 术语 自测练习 自测练习答案 练习 Internet和World Wide Web中的STL资源 STL文献 第21章 ANSI/ISO C++标准语言补充 21.1 简介 21.2 bool数据类型 21.3 static—cast运算符 21.4 const—cast运算符 21.5 reinterpret—cast运算符 21.6 名字空间 21.7 运行时类型信息(RTTI) 21.8 运算符关键字 21.9 explicit构造函数 21.10 mutable类成员 21.11 类成员指针(.和—>) 21.12 多重继承与virtual基类 21.13 结束语 小结 术语 自测练习 自测练习答案 练习 附录A 运算符的优先级与结台律 附录B ASCII字符集 附录C 数值系统 附录D 有关C++的Internet与Web资源 参考文献 【媒体评论】
C++ 是一种面向对象的编程语言,它是一种通用编程语言,支持多重编程风格,包括面向对象、泛型和过程化编程。在本教程中,我们将介绍 C++ 的基础概念和语法。 1. C++ 基本语法 C++ 程序由一个或多个函数组成,每个函数包含一组指令。以下是一个简单的 C++ 程序示例: ``` #include <iostream> using namespace std; int main() { cout << "Hello, World!"; return 0; } ``` 2. 数据类型C++ 中,有许多不同的数据类型,包括整数、浮点数、字符字符串等。以下是一些常见的数据类型: - 整数类型:int、short、long、long long - 浮点类型:float、double、long double - 字符类型char - 字符类型string 3. 控制语句 C++ 提供了许多控制语句,用于控制程序的执行流程。以下是一些常见的控制语句: - if-else 语句 - switch 语句 - 循环语句:for、while、do-while 4. 函数 函数是 C++ 程序的基本组成部分之一,它包含一组指令,用于完成特定的任务。以下是一个简单的函数示例: ``` int add(int a, int b) { return a + b; } ``` 5. 数组 数组一个存储相同类型数据的集合。以下是一个简单的数组示例: ``` int numbers[5] = {1, 2, 3, 4, 5}; ``` 6. 指针 指针C++一个非常重要的概念,它是一个变量,存储一个内存地址。以下是一个简单的指针示例: ``` int a = 10; int *ptr = &a; ``` 以上就是 C++ 的基础概念和语法,希望能帮助你入门 C++ 编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值