第1章
C++对C与类无关的扩展(1) .............................................................................................. 6 1.1
C++的基本知识 ......................................................................................................................... 6 1.1.1 命名空间 ............................................................................................................................ 6 1.1.2 C++输入输出简介 ............................................................................................................. 6
1.2
C++对C语言与类无关的性能扩充 ........................................................................................ 7 1.2.1 新增const常量定义符 ...................................................................................................... 7 1.2.2 功能 .................................................................................................................................... 7 1.2.3 定义 .................................................................................................................................... 7 1.2.4 C++中为什么要提供const ............................................................................................... 7 1.2.5 正确区分const在修饰指针时的两种不同用法 .............................................................. 7 1.2.6 正确区分符号名之前有无const修饰时的不同 .............................................................. 8 1.2.7 正确区分C语言中的#define与C++中的const的不同: ............................................ 8
1.3 bool类型 .................................................................................................................................... 8 1.4
string 类型 ................................................................................................................................. 9 1.4.1 定义string类型的变量 ..................................................................................................... 9 1.4.2 转换为C风格的字符串 ................................................................................................... 9 1.4.3 string 的使用 ..................................................................................................................... 9
1.5
枚举类型 .................................................................................................................................. 10 1.5.1 枚举类型的声明和定义 .................................................................................................. 10 1.5.2 匿名枚举类型 .................................................................................................................. 10
1.6
变量的块内定义 ...................................................................................................................... 10 1.6.1 正确理解C中变量的定义要求 ..................................................................................... 10 1.6.2 C++中的变量定义的规则 ............................................................................................... 10 1.6.3 正确理解C++中的变量的各种作用域。 ...................................................................... 11
1.7
变量的引用操作符 & ............................................................................................................. 11 1.7.1 引用 .................................................................................................................................. 11 1.7.2 定义的语法 ...................................................................................................................... 11 1.7.3 引用调用的优点 .............................................................................................................. 12 1.7.4 正确区分引用在如下两种不同的应用场合时的差别: .............................................. 13 1.7.5 函数形参定义为引用参数时的调用要求 ...................................................................... 13 1.7.6 函数形参定义为引用参数时的的编程效果 .................................................................. 13
第2章
C++对C与类无关的扩展(2) ............................................................................................ 15 2.1
函数 .......................................................................................................................................... 15 2.1.1 函数原型 .......................................................................................................................... 15
2.2 函数返回一个引用 .................................................................................................................. 15 2.2.1 引用的返回 ...................................................................................................................... 15
2.3
内联函数 .................................................................................................................................. 16 2.3.1 含义 .................................................................................................................................. 16 2.3.2 为什么内联函数优越于宏替换 ...................................................................................... 16 2.3.3 内联函数的定义 .............................................................................................................. 16 2.3.4 不适宜定义为内联函数的场合 ...................................................................................... 17
2.4
函数默认参数 .......................................................................................................................... 17 2.4.1 函数重载 .......................................................................................................................... 17
1
2.5 函数模板 .................................................................................................................................. 18 2.5.1 函数模板 .......................................................................................................................... 18
2.6 定义语法 .................................................................................................................................. 18 2.6.1 应用实例 .......................................................................................................................... 18
2.7 new 和 delete 操作符 ............................................................................................................ 19 第3章
C++对C语言与类有关的性能扩充 ...................................................................................... 20 3.1 基本知识 .................................................................................................................................. 20 3.2
面向对象(Object Oriented) ................................................................................................ 20 3.2.1 面向对象(OO): .......................................................................................................... 20 3.2.2 面向对象程序设计方法(OOP): ................................................................................. 20 3.2.3 应用实例 .......................................................................................................................... 21 3.2.4 OOP的优点: ................................................................................................................. 22
3.3 抽象 .......................................................................................................................................... 22 3.3.1 如何实现抽象 .................................................................................................................. 22
3.4 封装 .......................................................................................................................................... 22 3.5 继承与派生 .............................................................................................................................. 23 3.6 多态性 ...................................................................................................................................... 23 3.7
类和对象 .................................................................................................................................. 23 3.7.1 C++中的类: ................................................................................................................... 23 3.7.2 如何正确定义出类的成员 .............................................................................................. 24 3.7.3 类中成员的访问控制项 .................................................................................................. 25
3.8 类中成员之间的访问方式: .................................................................................................. 25 第4章
C++类和对象的编程 ............................................................................................................... 26 4.1 对象的含义 .............................................................................................................................. 26 4.2 对象定义语法 .......................................................................................................................... 26 4.3 客观对象 .................................................................................................................................. 26 4.4 C++中的对象 ........................................................................................................................... 26 4.5 使用对象 .................................................................................................................................. 26 4.6
类中的各种特殊成员函数 ...................................................................................................... 27 4.6.1 内联成员函数 .................................................................................................................. 27 4.6.2 允许带有缺省形参值的函数 .......................................................................................... 27 4.6.3 类中的函数重载 .............................................................................................................. 27 4.6.4 构造函数 .......................................................................................................................... 27 4.6.5 析构函数 .......................................................................................................................... 29 4.6.6 拷贝构造函数 .................................................................................................................. 30
4.7
异常处理 .................................................................................................................................. 32 4.7.1 异常处理的方法 .............................................................................................................. 32 4.7.2 异常规格说明 .................................................................................................................. 32
第5章
C++中的对象的各种编程 ....................................................................................................... 33 5.1
对象赋值 .................................................................................................................................. 33 5.1.1 方法 .................................................................................................................................. 33 5.1.2 应用目的 .......................................................................................................................... 33 5.1.3 实现规则 .......................................................................................................................... 33
5.2
对象数组 .................................................................................................................................. 33 5.2.1 定义的语法 ...................................................................................................................... 34 5.2.2 访问方法 .......................................................................................................................... 34
2
5.2.3 对象数组的初始化 .......................................................................................................... 34 5.2.4 对象数组编程时的构造函数设计 .................................................................................. 34 5.2.5 对象数组编程时的析构函数设计 .................................................................................. 34
5.3
对象指针 .................................................................................................................................. 35 5.3.1 C/C++语言中的指针 ....................................................................................................... 35 5.3.2 C++中的对象指针 ........................................................................................................... 35
5.4 对象可以作为函数的形参和返回值的定义 .......................................................................... 36 5.5 类中包含有对象成员(类的聚集,对象内嵌,包容法使用类的资源) .......................... 37 5.6
类中的静态成员 ...................................................................................................................... 37 5.6.1 静态成员的编程 .............................................................................................................. 37 5.6.2 静态成员的访问方法: .................................................................................................. 38 5.6.3 静态成员函数与非静态成员函数之间的访问: .......................................................... 38
5.7 C++中的this指针 ................................................................................................................... 39 第6章
友员函数与运算符重载 .......................................................................................................... 41 6.1
友员函数 .................................................................................................................................. 41 6.1.1 友员函数 .......................................................................................................................... 41 6.1.2 为什么需要友员函数: .................................................................................................. 42 6.1.3 友员函数与成员函数在编程方面的不同点 .................................................................. 42 6.1.4 友员函数与一般函数(非成员函数)在编程方面的不同点 ...................................... 42
6.2
友员类: .................................................................................................................................. 42 6.2.1 含义 .................................................................................................................................. 42 6.2.2 友员类的定义 .................................................................................................................. 42 6.2.3 应用目的 .......................................................................................................................... 43
6.3 类的引用性前向说明 .............................................................................................................. 43 6.4
运算符重载 .............................................................................................................................. 43 6.4.1 运算符重载的实现 .......................................................................................................... 43 6.4.2 使用类的成员函数实现重载 .......................................................................................... 44 6.4.3 使用友员函数实现重载 .................................................................................................. 46 6.4.4 自动类型转换 .................................................................................................................. 46 6.4.5 运算符重载编程的进一步说明 ...................................................................................... 47
第7章
C++类的继承与派生 ............................................................................................................... 48 7.1
入门知识 .................................................................................................................................. 48 7.1.1 继承 .................................................................................................................................. 48 7.1.2 派生 .................................................................................................................................. 48 7.1.3 为什么需要继承与派生 .................................................................................................. 48 7.1.4 应用的目的 ...................................................................................................................... 48 7.1.5 继承的可行性 .................................................................................................................. 48
7.2
如何实现继承与派生 .............................................................................................................. 49 7.2.1 基类和派生类 .................................................................................................................. 49 7.2.2 派生类的定义语法 .......................................................................................................... 49 7.2.3 如何设计派生类成员 ...................................................................................................... 49
7.3
继承的方式 .............................................................................................................................. 50 7.3.1 三种继承的方式差别 ...................................................................................................... 50 7.3.2 public 和 private继承方式的区别 ................................................................................ 50
7.4
继承的多重性 .......................................................................................................................... 52 7.4.1 含义 .................................................................................................................................. 52
3
7.4.2 对象的多重相关性 .......................................................................................................... 52 7.4.3 多重继承时的派生类的定义语法 .................................................................................. 52 7.4.4 应用场合 .......................................................................................................................... 52 7.5 继承时的构造函数 .................................................................................................................. 52
7.5.1 设计原则 .......................................................................................................................... 52 7.5.2定义的格式 ............................................................................................................................. 53 7.6 继承时的析构函数 .................................................................................................................. 54
7.6.1 设计原则 .......................................................................................................................... 54 7.6.2 定义格式 .......................................................................................................................... 54 7.6.3 原因 .................................................................................................................................. 54 7.6.4 调用次序 .......................................................................................................................... 54
第8章 多重多级继承及虚基类 .......................................................................................................... 56
8.1 多重多级继承时访问二义性 .................................................................................................. 56
8.1.1 访问时的二义性 .............................................................................................................. 56 8.1.2 在多重继承时的二义性 .................................................................................................. 56 8.1.3 同名支配(覆盖)原则 .................................................................................................. 57 8.1.4 在多级继承时的二义性 .................................................................................................. 57 8.2 虚基类 ...................................................................................................................................... 57
8.2.1 定义语法 .......................................................................................................................... 57 8.2.2 作用 .................................................................................................................................. 58 8.2.3 如何判断是否为虚基类的问题 ...................................................................................... 58 8.2.4 处理的方法 ...................................................................................................................... 58 8.2.5 带有虚基类的最远的派生类的构造函数 ...................................................................... 58
第9章 多态性和虚函数 ...................................................................................................................... 60
9.1 多态性 ...................................................................................................................................... 60
9.1.1 多态性 .............................................................................................................................. 60 9.1.2 作用 .................................................................................................................................. 60 9.1.3 赋值兼容原则 .................................................................................................................. 60 9.1.4 指向派生类及基类对象的指针 ...................................................................................... 61 9.2 虚函数 ...................................................................................................................................... 61
9.2.1 定义语法 .......................................................................................................................... 61 9.2.2 虚函数的特点 .................................................................................................................. 62 9.2.3 为什么需要虚函数 .......................................................................................................... 62 9.2.4 静态联编 .......................................................................................................................... 63 9.2.5 动态联编的应用 .............................................................................................................. 63 9.2.6 如何实现动态联编 .......................................................................................................... 63 9.3 虚析构函数 ..............................................................................................................................
9.3.1 原因 .................................................................................................................................. 9.3.2 应用场合 .......................................................................................................................... 9.4 纯虚函数和抽象基类 .............................................................................................................. 65
9.4.1 纯虚函数 .......................................................................................................................... 65 9.4.2 定义语法 .......................................................................................................................... 65 9.4.3 抽象基类的编程规则 ...................................................................................................... 65 9.4.4 抽象基类的用途 .............................................................................................................. 65
第10章 综合应用 .................................................................................................................................. 68
10.1 类模板 ...................................................................................................................................... 68
4
10.1.1 10.1.2 模板的声明 ...................................................................................................................... 68 模板的使用 ...................................................................................................................... 68
5
中科院计算所培训中心 计算机专业技能培训系列教材-教材名称
第1章 C++对C与类无关的扩展(1)
【本章中的知识要点】
□ 正确理解C语言与C++语言的差别 □ C++对C语言扩充体现的几个方面 【重点难点】
□ const用法 □ string用法 □ 引用
1.1 C++的基本知识
1.1.1 命名空间
C++提供名字空间来防止命名的冲突。例如,如果两个库都定义了cout,当一个应用程序使用这两个库时,将导致命名冲突。大型应用系统由许多人来完成,命名冲突是一种潜在的危险,程序员必须细心的定义标志符以保证名字的唯一性。名字空间std涵盖了标准C++的定义和声明,例如:std::cout。
命名空间的声明: namespace ttl {
int x; }
命名空间的使用(两种方式):
1) 先引用再访问例如:
using ttl::x; 或者 using namespace ttl; x=6; x=6; 2) 直接访问如: ttl::x=34;
1.1.2 C++输入输出简介
C++的基本输出包括cin和cout。
中科院计算所培训-沈阳
6
中科院计算所培训中心 计算机专业技能培训系列教材-教材名称
1.2 C++对C语言与类无关的性能扩充
1.2.1 新增const常量定义符 1.2.2 功能
它用来冻结一个变量的值,使其值在程序中不能被进一步改变(置成只读属性,即变为常量)。
1.2.3 定义
const 类型定义符 变量名==初值;
如: const int sumValue=10; //常量定义 const int *ptr; //限定指针
void Function(const int & X) //限定函数的形参 { }
1.2.4 C++中为什么要提供const
其目的是替代C语言中的编译预处理命令#define(常量定义),但比它更加语义精确 因为#define无法准确地反映常量的数据类型。如:
#define sumValue 10 //此时的sumValue是char型还是int型? 对变量一经const 修饰后,必须给它赋初值(但用于函数的形参时不需赋初值),一经const修饰后便不能修改此符号名之值。 const int x=12;
x=54; //error
void Display(const int *ptr, const int n)
{
cout<< ptr[0];//==*(ptr+0),显示数组中的第一个元素之值
ptr[0]=1; //错误,不能修改其值(不能通过指针来改变目标单元之值)
*ptr=1; //错误,不能修改其值(不能通过指针来改变目标单元之值) }
1.2.5 正确区分const在修饰指针时的两种不同用法
const int *ptr=&X; 此时不能通过指针来访问改变目标单元之值,即*ptr=1 是错误的,
但是ptr本身可以被改变 ptr=&Y;此种用法常见于函数的形参。 void fun(const int * ptr) { *ptr=1; //错误的 }
int * const ptr=&X;此时ptr本身不可以被改变( ptr=&Y是错误的);但ptr所指向的
目标的单元之值是可以被改变的(如 *ptr=2; 即 X=2);此时ptr类似于数组名(常量指针)。 int ptr[10]; ptr[0]=2;
中科院计算所培训-沈阳
7
中科院计算所培训中心 计算机专业技能培训系列教材-教材名称
1.2.6 正确区分符号名之前有无const修饰时的不同
int sum=1; //无const修饰时
此时 sum为变量,意味着其值可以被改变(如:sum=2;);同时其内存字节数为两个字节(在PC下为16位)。
const int sum=1; //有const修饰时
此时 sum为常量,意味着其值不可以被改变(如:sum=2;);同时不需要占用内存空间。另外C++语言视经const修饰的符号名为常量特性,因而它可以用于任何可能出现数字常量的场合(如数组的大小的说明等)。 const int ArraySize=10; char array[ArraySize];
1.2.7 正确区分C语言中的#define与C++中的const的不同:
由#define所定义的符号名为全局性常量,因而在整个程序中应保持符号名的唯一性; const可以说明一个局部或全局性同名常量(据此可以改变const符号名之值)。
另外在语法方面,#define为编译预处理命令,而const为定义符,语句以“;”结束。
#define Min 1
const int Max=100; void main(void)
{ #define Min 2 //错误,不能再定义同名常量 const int Max=200; //可以再定义同名局部常量 }
要点const也可以限定引用与函数(见后文介绍)。
1.3 bool类型
在C语言中真值用非零表示,假值用零表示。C++新增了数据类型bool(增加可读性),可以取值true或false,用来表示真值或假值。bool依然支持非零和零的形式。例如:
int val; cin>>val; if(val) …
也是合法的。如果val的值非零,条件判断为真(true);如果val的值为零,条件判断为假(false)。 在默认情况下,bool表达式输出时,真值为1,假值为0。例如:
bool flag; flag=(3<5);
Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务