当前位置:首页 >> 其它课程 >> 1 从C到C++

1 从C到C++


面向对象程序设计(C++)

第1章 从C到C++
-- C++过程化程序设计

C++语言的词法系统
?

1、字符集
?

大小写英文字母、数字字符、其他字符

?

2、词法规则
? ?

标识符 关键字
? ?

new,delete,friend,inline,operator,private,protected public,this,virtual

? ? ? ?

运算符 分隔符:空格、逗号、分号、冒号 常量:const 注释符://

C++程序结构特点
?

C++程序由类和函数构成
?

?

一个C++程序由若干文件构成,每个文件 由若干类和函数构成。 C++中的函数可以定义在类之外,称为一 般函数,也可以定义在类中,称为类的成员 函数。

?

语句是组成程序的基本单元

变量和常量
?

基本数据类型
?

新增布尔型,说明符为bool,取值为true和false。

?

自定义数据类型
?

类类型
新的变量声明及初始化方法:
? ?

?

变量
?

int a=5; int a(5);

?

常量的定义格式
? ?

const <类型说明符> <常量名>=<常量值>; const int a=5;

运算符和表达式
?

C++中新增运算符:
? ? ? ?

:: 作用域运算符 new 动态内存分配 delete 内存回收 .*和->* 成员指针选择运算符

? ? ?

C++中大多数运算符可以重载 运算符的优先级和结合性 表达式、类型转换、类型定义

输入/输出
? ?

?

C++的输入输出操作由I/O流类库提供。 键盘输入使用标准输入流对象cin和提取运算 符>>,通过这种方法可以从cin的输入流中获 取不同类型的数据。>>运算符可以连用,从 同一个输入流中提取多个数据项给其后的多个 变量赋值,输入流的多个数据项用分隔符隔开。 屏幕输出使用标准输出流对象cout和插入运算 符<<,可以输出不同类型的数据。

命名空间和标准库
?

?

命名空间(namespace)是C++为解决命名 冲突而引入的一种机制。 标准库(Standard Library)是每个C++编 译器都必须支持的类型和函数的集合。 C++的标准库包括C标准程序库、I/O流、 string、国际化、数值处理、诊断支持以及 标准模板库STL(容器、算法和迭代器)。

命名空间和标准库
? ?

?

标准库内容众多,为避免命名冲突,标准库中的内容 都被放入命名空间std中。 C++标准发布之前,不带命名空间的旧式C++库被应 用于大量程序的开发,为兼容这些代码,C++标准委 员会为std命名空间中的标准库命名了新的头文件名, 命名规制是: ? 去掉现有C++头文件名中的”.h” ? C标准库头文件同样去掉”.h”,并在名字前加一 个”c”。 旧式的C++头文件依然被众多编译器支持,只是不在 命名空间std中。

命名空间和标准库
?

当使用标准库中的名称时,必须显式地 表达出使用的是命名空间std中的名称, 可用域运算符”::”限定:
std::cout<<“Hello World!”<<std::endl;

?

或使用语句 using namespace std; 这 样,命名空间std中定义的所有名称都可 直接使用,不需域运算符限定。

函数
?

函数的定义和说明
?

C++规定,定义函数时必须指出该函数的 返回值类型,没有返回值时,用void进行说 明。

? ?

函数的默认参数 C++语言允许在函数说明或定义时给一 个或多个参数指定默认值,使函数调用 更加方便灵活。
?

int fun(int a,int b=5,int c=8);

函数
?

在设置和使用默认参数时要注意:
?

?

?

?

指定默认值,要从参数表的右端开始,在指定了默认值的 参数的右边不允许出现没有指定默认值的参数。 在调用函数时,给定的实参值将取代默认值,没给出实参 值则使用参数的默认值。 如果一个函数需要说明,默认的参数值应该出现在函数的 说明而不是函数定义中。如果函数没有说明则可将默认参 数值设置在函数的定义中。 默认值可以是数值、表达式、全局变量,但不可以是局部 变量。因为默认参数的函数调用是在编译时确定的,而局 部变量在编译时无法确定。

函数
#include<iostream.h> void fun(int a=1,int b=2,int c=3) { cout<<“a=”<<a<<?,? <<“b=”<<b<<?,? <<“c=”<<c<<endl; } void main() {
fun(); fun(9); fun(4,5); fun(7,8,9);

运行结果: a=1, b=2, c=3 a=9, b=2, c=3 a=4, b=5, c=3 a=7, b=8, c=9

}

函数
?

函数的调用方式
?
? ?

传值调用 传址调用 引用调用

?

函数的嵌套和递归

函数
?

内联函数
?

?

函数调用需要一定的时间和空间消耗,对于 规模较小且调用频繁的函数可以通过内联函 数改善其效率。 编译时,编译器将程序中出现的内联函数的 调用表达式用该内联函数的函数体进行替换。

函数
?

定义内联函数的方法是在函数头前加关键字inline。
inline int cube_int(int n) { return n*n*n; }
?

#include<iostream.h> inline int cube_int(int n); void main() { for (int i=1;i<=10;i++) { int p=cube_int(i); cout<<p<<endl; } }

使用内联函数要注意:
?

?

?

内联函数内不允许含有循环和 开关语句。 内联函数的函数体以1~5行 为宜。 类内定义的成员函数都是内联 函数。

函数
? ?

重载函数 C++中引入重载函数,允许一个函数名 对应多个不同的函数实现。例如:
? ? ?

int abs(int); long abs(long); double abs(double);

?

这些函数名称一样,但在参数个数、参 数类型等方面会存在不同之处。

函数
? ?

调用重载函数时选择的原则 重载函数至少在参数类型、参数个数或参数顺 序上存在不同,仅仅在返回值类型上不同是不 够的。
? ? ?

int fun(int,double); int fun(double,int); void fun(int,double);

?

第二个函数可以和其他两个重载,而第一个和 第三个不可重载。

函数
?

重载函数的选择顺序:
? ?

?

先查找严格匹配的 再通过内部类型转换查找可以匹配的 最后通过用户自定义的强制类型转换查找

例如,重载函数f1有两种形式: void f1(int);void f1(double); 可以如下调用:
f1(1); //严格匹配void f1(int); f1(1.5); //严格匹配void f1(f1(double); f1(?m?); //内部转换匹配void f1(int); f1((double)5); //用户强制转换匹配void f1(double);

引用
?

引用的概念
?

?

引用是某个变量或对象的别名。建立引用时, 要用某个变量名或对象名对其初始化,于是 该引用便绑定在该变量或对象上。 引用不是变量或对象,不占内存空间。引用 只是作为某个变量或对象的别名使用。引用 的值是被引用变量的值,引用的类型是被引 用的变量的类型,对引用的修改就是对它所 绑定的变量或对象的修改。

引用
?

建立引用的格式
? ?

<类型说明符> & <引用名>=<变量名或对象名> 例如: ? int a; ? int &ra=a; ? 其中,ra是引用名,即ra是变量a的别名。符号 &是说明符,用在引用名前,说明ra是一个引用。 注意区分与取地址操作&的差别,取地址符&是 运算符,用在变量名前面。

引用
?

引用和指针的区别
? ? ?

?
?

指针是变量,引用不是变量。 指针可以被引用,而引用不可以。 指针可以作为数组元素,但不能建立引用数 组。 可以有空指针,不能有空引用。 引用一旦初始化,就被绑定在初始化的那个 变量或对象上,不再改变。

引用的应用
?

引用作为函数参数
?

?

引用作为函数参数可以达到指针作为函数参数的目 的:不拷贝副本,在被调用函数中修改调用函数中 的实参值。 引用作为函数参数时,调用函数的实参与一般传值 调用一样使用变量名或对象名。比使用指针作为参 数时实参要用地址形式的可读性更好。

引用的应用
void swap(int x,int y) { int t; t=x; x=y; y=t; } //传值 void swap(int *x, int *y) { int t; t=*x; *x=*y; *y=t; } //传地址 void swap(int& x,int& y) { int t; t=x; x=y; y=t; } //传引用 main() { int a=5,b=6; … swap(a,b); swap(&a, &b); swap(a,b); … printf(“a=%d,b=%d” , a, b); }

引用的应用
?

引用作为函数的返回值
?

?

?

一般函数返回值时都要建立临时变量,即用来拷贝 副本。具体实现是先将返回表达式的值传递给临时 变量,返回主函数后,再将临时变量的值传递给接 收函数返回值的变量。 函数返回引用时,并不产生副本,而是将其返回值 直接传递给接收函数返回值的变量。但要注意避免 返回值是局部变量的情况。 返回引用的调用函数可以作为左值进行计算。

#include <iostream.h> bool Factor(int, int&, int&);

void main() { int number,square,cube; bool error; cout <<"Enter a number(0~20): "; cin >>number;

bool Factor(int n, int& rSquare, int& rCube) { if(n>20 || n<0) return true; rSquare = n*n; rCube = n*n*n; return false; }

error=Factor(number, square, cube); if(error) cout <<"Error encountered!\n"; else{ cout <<"Number: " <<number <<endl; cout <<"Square: " <<square <<endl; cout <<"Cube: " <<cube <<endl; }

}

引用的应用
#include<iostream.h> int &fun(int a) { static int t; t=2*a; return t; } void main() { int x(5),y(8); int s1=fun(x); int s2=fun(y); cout<<"s1="<<s1<<endl<<"s2="<<s2<<endl; }

//从键盘输入若干字符,统计其中数字字符和非数字字符的个数 #include<iostream.h> int &fun(char cha, int &n, int &c) { if(cha>='0' && cha<='9') return n; else return c; } void main() { int tn(0),tc(0); char ch; cout<<"Enter characters:"; cin>>ch; while(ch!='#') { fun(ch,tn,tc)++; cin>>ch; } cout<<"Number characters:"<<tn<<endl; cout<<"Other characters:"<<tc<<endl; }

引用的应用
?

用const限定引用
?

当一个函数的参数被设定为const的时候, 其值就不允许被修改。使用const限定引用 参数,则可以保护调用函数的实参值不会被 修改,同时又可以不拷贝副本。

动态内存分配和回收
?

new和delete
? ? ?

堆内存——动态内存(在运行时申请内存)。 用户内存:代码区、全局数据区、栈区、堆 new和delete的格式
?

创建、销毁一变量: new 数据类型(初始值); delete 指针名; int *p; p=new int; delete p;

?

创建、销毁一数组: new 数据类型[长度]; delete[]指针名; int *p; p=new int[30]; delete []p;

动态内存分配和回收
?

说明
new类似于函数malloc(),分配堆内存,但比malloc()更 简练。 ? new的操作数为数据类型,它可以带初始化值表或单元个 数。new返回一个具有操作数的数据类型的指针。
?

new和delete是C++专有的操作符,它们不用头文件声明。 ? delete类似于free(),释放堆内存。delete的操作数是 new返回的指针,当返回的是new分配的数组时,应该带 []。 delete[]data; ? 由于堆对象的生存期是从创建对象到销毁或程序结束,因 此,删除不再需要的堆对象是一个必须进行的工作。
?


更多相关文档:

C++编程练习—从C到C++1

C++编程练习—从C到C++1 homeworkhomework隐藏>> C++编程练习 1 编程练习题目描述: 题目描述:从硬盘上读取文本文件(一篇英语文章) ,将这篇文章的内容使用适当的...

C C++程序设计课后答案

(int n) C.setfill(int n) D.setprecision(int n) 二、 填空题 1.C/C++程序是由个或多个函数组成的,但必须要有个( )函数,程序从这个函数 开始...

为什么C和C++牛人多?

=== 我们学校里,职场里面,确实有种看法,玩 C 和 C++的人,水平通常要高一 点,而做 Java 和.net 的朋友呢,总是有种要受歧视的感觉。 现在虽然好点了...

C,C++,C#三者区别

下面是 C 语言教程的地址,想学的话可以去看看。 http://www.bc-cn.net/Article/kfyy/cyy/jc/ C++在 C 的基础上改进后的种编程语言, 主要是增添了...

C++程序设计试题及答案1

1.C++源程序文件扩展名为( A ) A..cpp B..h C..1ib D..obj 2.在 C++中使用流进行输入输出,其中专用于从键盘进行输入的流是( B ) A.cerr B.cin ...

C++第1次实验及部分答案

2.掌握 VC++集成开发环境下编辑、编译、连接和运行C++程序的步骤。 3...实验数据:50,40 (3)从键盘输入个四位整数 n=abcd,从左到右用 a、b、c...

【杰米诺课堂】从0到1成为C++开发工程师 手把手教学第...

会使用电脑上完的人获得C++系统级开发的核心技能和素养。成为炙手可热的系统级C++优秀人才。视频教程,杰米诺全套教学,在线学习C/C++课程,【杰米诺课堂】从0到1成为...

一个C++程序员的学习经历

不置评论) 1.必须对 C/C++非常熟悉 如果 C 不熟,可以看清华谭浩强的书,...(学习时间 4 到 7 个月) 4. 学习 VC 是为了 Windows 平台下做开发, ...

C和C++头文件一览表

CC++头文件一览表_IT/计算机_专业资料。该文章主要介绍了有关CC++的有关...出错返回-1 exec 函数族中,后缀 l、v、p、e 添加到 exec 后, 所指定...

C++语言程序设计课后答案(郑莉第4版)

第二章 C++简单程序设计 2-1 C++语言有那些主要特点和优点? 解: C++语言的主要特点表现两个方面,是全面兼容 C,二是支持面向对象的方法。C++ 个更好...
更多相关标签:
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com