C++程序设计笔记.docx

上传人:b****7 文档编号:9542365 上传时间:2023-02-05 格式:DOCX 页数:20 大小:29.47KB
下载 相关 举报
C++程序设计笔记.docx_第1页
第1页 / 共20页
C++程序设计笔记.docx_第2页
第2页 / 共20页
C++程序设计笔记.docx_第3页
第3页 / 共20页
C++程序设计笔记.docx_第4页
第4页 / 共20页
C++程序设计笔记.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

C++程序设计笔记.docx

《C++程序设计笔记.docx》由会员分享,可在线阅读,更多相关《C++程序设计笔记.docx(20页珍藏版)》请在冰豆网上搜索。

C++程序设计笔记.docx

C++程序设计笔记

C++程序设计笔记

一、面向对象和面向过程的比较

面向过程的方法将数据结构和过程作为两个实体来对待,其着重点在过程,设计人员首先考虑如何将功能分解,在每一个过程中又要着重安排程序的操作序列,但同时程序员在编程时

又必须时时考虑数据结构,因为毕竟操作要作用于数据上。

数据结构和过程的分离,给程序设计人员造成沉重的负担。

例如,不可能要求数据结构始终没有变化,且不说在软件维护期间数据结构有可能发生变化,就是在软件的开发过程中也不能保证数据结构不发生变化。

面向过程程序设计的缺点之一,就是一旦数据结构需要变更时,必须修改与之相关的所有模块。

面向对象的方法将一组数据和与之有关的操作集合组装在一起,形成一个能动的实体,也就是数据的表示方式与对数据的操作细节被隐藏起来,用户通过操作接口对数据进行操作。

即通过数据封装把数据和有关的操作封装在对象中,即使数据结构需要变更,也只要在该对象内部进行,只要该对象的对外接口不变,就不会影响整个软件。

再通过派生和多态性机制就解决了面向过程程序的可重用性差、维护代价高等问题。

二、C++与面向对象有关的保留字

C++中专用于面向对象程序设计的关键字及它们的功能如下表所示:

关键字功能

catch捕获异常(错误)

class定义类

delete回收动态分配的内存

friend定义友元类或友元函数

inline定义内联函数

new动态分配内存空间

operator定义重载运算符函数

private说明私有成员

Protected说明保护成员

Public说明公有成员

Template定义、说明模板

this指向当前对象的系统指针

throw引发程序异常

Try检测程序异常

Virtual标记虚拟类和虚拟函数

三、一些语法项在传统C语言和C++语言中的功能对比

语法项功能

传统C语言C++语言

标识符长度有限长度无限,由系统决定

基本数据类型无长双精度类型有长双精度类型*

有长双精度类型*注释方式/**//**/或//行尾

作用域限定符:

:

无有**

类型名系统提供的标准类型名自定义结构类型可作类型名**

无名联合不允许出现允许出现,以成员名调用

局部变量说明在程序块前单独说明可出现在程序中的任意处

强制类型转换(类型)变量名(类型)变量名和类型(变量名)

指向void的指针字符指针普通无数值指针类型

输入/输出scanf/printfcin>>/cout<<

定义常量#defineconst

函数原型整型函数可先调用后定义任何函数必须先声明原型,然后才能调用,除非已先定义了函数返回类型主函数和整型函数可不给出返回类型任何函数必须给出返回类型,主函数也必须如此。

内联函数带参宏定义由前缀inline定义

重载函数被认为是重复定义函数可重载成同名函数

带缺省值函数不允许参数可带缺省值

动态空间分配free,malloc或callocnew,delete

引用不允许允许使用*长型双精度浮点数,即longdouble型数据。

该类型的双精度浮点数在内存中占用十个字节,数值范围

在3.4E-4932~1.1E+4932之间,其值的有效位数为十九位。

当定义或说明长型双精度浮点数时,其后面必须缀以‘L’或‘l’。

**作用域限定符:

:

的作用之一是解决变量名之间的冲突问题。

它的作用规则是:

若有一个全局变量与某一个函数中的自动(局部)变量,则在全局变量名之前缀以运算符‘:

:

’,因而在自动变量的作用域内,可以正常地调用该全局变量,而不必担心它被函数中的自动变量屏蔽掉。

此外,作用域限制符还用来给出数据成员和成员函数属于哪个类。

***结构、联合、枚举和类名可作为类型名,在定义它们的对象和变量时,不必在这些名称之前缀以"class"、"struct"、"union"、"enum"等。

四、const指针

 指向常量的指针

常量指针指向常量的常量指针

定义charconst*ptr=”asdfghjk”char*constptr=”asdfghjk”charconst*const

ptr=”asdfghjk”功能声明名字为ptr的指针变量,它指向一个字符型常量,初始化为指向字符串常量”asdfghjk”声明名字为ptr的指针变量,它是一个指向字符型数据的常量指针,并用”asdfghjk”的地址对它进行了初始化声明名字为ptr的指向字符型常量的常量指针,并且用常量字符串"example",对它进行了初始化对于所指常量不允许改变指针所指示的常量的值,即ptr[0]='A'是错误的允许改变指针所指示的常量,即ptr[0]='A'是合法的不允许改变指针所指示的常量,即ptr[0]='A'是错误的对于指针本身允许指针指向另一个常量,即允许改变指针的地址,即ptr=&str;*是合法的操作不允许改变指针的地址,即不允许指针指向其他的常量,即ptr=&str;*是非法的操作不允许改变指针的地址,即不允许指针指向其他的常量,即ptr=&str;*是非法的操作*constchar*str="student";即str也是一个指向常量的指针。

     面向对象程序设计>>第一章>>重点难点

一、面向对象程序设计的要素

例1:

(6)下列各项中不属于OOP语言特征的是( )

例2:

(7)面向对象系统中的封装单位是( )

例3:

(8)在有继承关系的类间,不应有的特性是( )

例4:

(9)下面关于多态性的叙述中,不正确的说法是( )

二、新的输入输出风格

例1:

一、新的输入输出风格实例

三、const类型修饰符的使用(难点)

例1:

二、const类型修饰符的使用实例

例2:

(10)下列各项中不属于使用const定义常量优于使用define处( )

四、对函数的更严格的要求和新的应用

例1:

三、函数的新应用的实例

例2:

(11)下列有关内联函数的说法中,不正确的是( )

例3:

(12)下列带缺省值参数的函数说明中,正确的说明是( )

例4:

(13)下列各项中不符合函数重载必须满足的条件的是( )

五、更合理的动态内存空间分配运算符

例1:

四、动态内存空间分配运算符new和delete使用实例

例2:

(14)下列关于动态空间分配的操作中,错误的是( )

六、引用--另一个函数参数传址工具(难点)

例1:

五、引用的实例

例2:

(15)引用不能用作( )

例3:

(16)下面对引用的操作中,不正确的操作是( )

    面向对象程序设计>>第一章>>案例分析

一、新的输入输出风格实例

从键盘输入两个整数,显示在屏幕上。

#include//必须包含的文件,‘cout’、‘<<’、‘cin’、‘>>’、‘endl’

voidmain()//在此文件中说明

{doublelength,width;//定义两个双精度变量---长度和宽度

 cout<<"Enterlengthandwidth:

";//请用户输入长度和宽度值

 cin>>length>>width;//输入长度和宽度,两数间用间隔符隔开

 cout>>"lengthis:

"<

"<

}

二、const类型修饰符的使用实例

改正程序的错误,使它的输出为:

Thevaluesare8,15

Thevaluesare8,815

Thevaluesare8,815

需要改错的程序为:

#include

voidcomp(constint&,int&);

intmain()

{intcount=8,index=15;

 cout<<”Thevaluesare”;

 cout<

 comp(count,index);

 cout<<”Thevaluesare”;

 c

out<

 return0;

}

voidcomp(constint&in1,int&in2)

{

 in1=in1*100;

 in2=in2+in1;

 cout<<”Thevaluesare”;

 cout<

}

由于作为参数的变量in1前缀了const,所以它是个常量,执行语句in1=in1*100;后无法使得in1的值改变。

为达到按给定的值输出,只要把语句in2=in2+in1;改为in2=in2+in1*100;即可。

此时,in2的值为815。

而形式参数是整数的引用,in2值的改变被带出函数comp,为实参index所继承,故能在主函数中得到正确的输出结果。

三、函数的新应用的实例

下面的例子为函数名重载和使用缺省参数的函数的实例下:

#nclude//头文件

voidprint(inti);//声明重载函数─参数为整型

voidprint(char*str);//声明重载函数─参数字符串

voidprint(int*a);//声明重载函数─参数为整型数组

intdata[9]={1,2,3,4,5,6,7,8,9};//定义整型数组

main()

{voiddisplay(constchar*name1,//声明带缺省值函数─本参数不带缺省值

 constchar*name2="default");//本参数带缺省值"default"

 display("Parameter1");//用一个参数调用带缺省值函数display

 display("Parameter1","ondisplay");//用二个参数调用带缺省值函数display

 print(7);//用整型数调用重载函数print

 print('a');//用字符调用重载函数print

 print("Hello");//用字符串调用重载函数print

 print(data);//用整型数数组调用重载函数print

}

voiddisplay(constchar*name1,constchar*name2)//定义带缺省值函数

{cout<

voidprint(inti)//定义重载函数─参数为整型

{cout<<"Thevalueoftheinteger="<

voidprint(char*str)//定义重载函数─参数为字符串型

{cout<<"Thevalueofthestring="<

voidprint(int*a)//定义重载函数─参数为整型数组

{cout<<"Thevaluesoftheintegervectoris"<

 for(inti=0;i<9;i++)

 cout<

 cout<

}

程序经过编译后运行的结果是:

Parameter1default

Parameter1ondisplay

Thevalueoftheinteger=7

Thevalueoftheinteger=65

Thevalueofthestring=Hello

Thevaluesoftheintegervectoris

123456789

四、动态内存空间分配运算符new和delete使用实例

#include

intmain()

{int*p=newint[5];//动态分配内存空间给含有五个元素的整型数组

 for(inti=0;i<5;i++)//给数组赋值

 p=(i+1)*2;

 for(i=5;i>0;i--)//输出数组的值

 cout<

 cout<

 delete[]p;//回收数组空间p

}

输出数组的值为:

10,8,6,4,2

五、引用的实例

下面这段程序是否正确?

为何?

#include

int&f()//定义一个返回引用的函数

{inti;returni;}

intmain()

{int&r1=f();//调用函数初始化引用&r1

 intr2=f();//调用函数给变量r2赋值

 cout<

 return1;

}

这段程序是有错误的,因为函数int&f()返回的是引用,应该返回returni;语句中所含的变量。

但在这段程序中,被返回的变量i是函数f()中的局部变量,当函数f()推出后,它也自动消亡,则返回的引用也就无处可指了。

这就是为什么要规定返回的一定要是全局变量的原因所在。

     面向对象程序设计>>第一章>>同步练习

一、单项选择题:

(1)条件编译指令中用来表示一条指令结束的是( )

A.#if  B.#endif  C.#else  D.#elif

  B  

(2)读程序.选择正确的输出结果( )

#include

voidmain( )

{intnum=500;

 int&ref=num;

 ref=ref+100;

 cout<<”num”<

 num=num+50;

 cout<<”ref”<

}

A.num=600ref=650    B.num=600ref=100

C.num=500ref=650    D.num=500ref=100

A//ref和num指向同一地址  

(3)C++中可以声明只读常量的关键字是( )

A.float  B.const  C.char  D.include

  B  

(4)C++程序的执行过程中,生成的机器能够理解和可执行的机器指令叫( )

A.链接程序          B.目标程序

C.可执行程序         D.源程序

  C  

(5)面向对象程序设计的( )特征使得程序设计中出错的可能性减少?

A.抽象  B.封装  C.多态  D.派生

  B  

(6)下列各项中不属于OOP语言特征的是( )

A.数据抽象、数据封装     B.继承性、多态性

C.数据抽象、数据归纳     D.数据封装、继承性

C//“数据归纳”不属于OOP语言的特征  

(7)面向对象系统中的封装单位是( )

A.类  B.结构  C.联合  D.对象

D//因为面向对象系统中的封装单位是对象  

(8)在有继承关系的类间,不应有的特性是( )

A.具有共享性         B.具有细微差别

C.具有层次结构        D.具有相同名称

D//C和C++中都不允许出现具有相同名称的元素  

(9)下面关于多态性的叙述中,不正确的说法是( )

A.多态性的使用大大提高了解决复杂性问题的能力

B.实现动态多态性的手段之一是函数重载

C.有静态和动态两种多态性

D.调用相同名称的函数导致完全不同行为的现象称为多态性

B//函数重载是实现静态多态性的手段之一  

(10)下列各项中不属于使用const定义常量优于使用define处( )

A.有自己的数据类型      B.可用于结构、类和数组中

C.可使用小写字母       D.避免使用define时的错误

C//“可使用小写字母”不属于使用const定义常量优于使用define处  

(11)下列有关内联函数的说法中,不正确的是( )

A.内联函数的使用较使用带参宏代换更安全

B.内联函数必须在调用前先声明

C.内联函数必须在main()之前定义

D.内联函数必须使用标识符inline标识

B//因为内联函数必须在主函数main()之前定义,故在调用前已定义了  

(12)下列带缺省值参数的函数说明中,正确的说明是( )

A.intFun(intx,inty=2,intz=3);

B.intFun(intx=1,inty,intz=3);

C.intFun(intx,inty=2,intz);

D.intFun(intx=1,inty,intz=3);

A//按带缺省值参数的函数说明中参数安排规则  

(13)下列各项中不符合函数重载必须满足的条件的是( )

A.必须有不同的参数个数    B.对应的参数类型必须不相同

C.A和B必须同时满足    D.A和B只要满足一个即可

C//因为函数重载必须满足“有不同的参数个数”和“对应的参数类型必须不相同”之一即可

(14)下列关于动态空间分配的操作中,错误的是( )

A.当分配空间时,必须先定义所需空间数据类型的指针

B.当给数组分配空间时,必须给出各维的元素个数

C.当删除数组时,在被删指针前必须加符号[]

D.用new对任意类型的数据分配空间并进行初始化

D//由于可以使用new给任意类型的数据分配空间,但并不是任意类型的数据都能进行初始化的,如数组就不能在分配空间的同时被初始化  

(15)引用不能用作( )

A.数组的别名         B.变量的别名

C.函数的参数         D.函数的返回值

A//因为引用不能用作数组的别名  

(16)下面对引用的操作中,不正确的操作是( )

  A.inti=5;B.inti=20,j=30;

int&j=i;int&k=i;

i=10;i=j;

  C.inti=j=30;D.inti=10,j=30;

int&k=i;int&k=i;

int&k=j;int&l=j;

C//因为“引用”不能被重新定义

二、填空:

(1)面向对象的程序设计方法要求语言必须具备_____,_____,_____和_____等这几个关键要素。

抽象、封装、继承和多态性  

(2)条件编译指令是_____,_____,_____,_____和_____,它们构成类似于C++和C中的if选择结构。

#if,#else,#elif,#error和#endif  

(3)在C语言中,动态内存分配是通过系统函数malloc( )、free( )和运算符sizeof来实现的。

在C++中,动态内存分配是通过_____和_____两个运算符进行内存分配的。

new和delete  

(4)C++语言由六类语法标记组成,它们是_____,_____,_____,_____,_____,_____.

关键字,标识符,常量,串,运算符,特殊符号  

(5)在面向对象的程序中,对象之间通过_____实现互相通信.

函数调用  

(6)数据封装是把数据的_____与_____隐藏起来。

表示方式,对数据的操作细节  

(7)继承的作用包括_____和_____两个方面。

减少代码冗余,减少相互间的接口与界面  

(8)C++中,动态分配空间使用_____运算符,若需给一个整数分配内存并初始化为20,则语句必须

使用语句_____。

new,int*p=new(20)  

三、程序分析题

分析如下程序,并给出它的输出结果。

#include

intf(inti)

{return++i;}

intg(int&i)

{return++i;}

voidmain()

{inta=0,b=0,c=0,d=0;

 a+=f(g(a));

 b+=g(g(b));

 c+=g(f(c));

 d+=f(f(d));

 cout<<"a="<

}

输出为:

a=1;b=1;c=0;d=0  

四、指出下面程序的错误:

#include

voidmain( )

{charx[5]=“abcdefghij”;

 cout<

 x=“klmno”;

 cout<

}

共两处错误:

第一处:

charx[5]=“abcdefghij”;数组只能提供五个字符空间。

第二处:

x=“klmno”;不能把一个字符串给一个数组。

五、程序填空

#include<______1______>

voidchange(int&,int&);

voidmain( )

{intm=5,n=20;

 change(m,n);

 cout<<”m=”<

}

voidchange(_____2_____,_____3_____)

{inttemp=_____4_____;

 m=_____5_____;

 n=_____6_____;

}

1:

iostream.h

2:

int&m

3:

int&n

4:

m

5:

n

6:

temp

      面向对象程序设计>>第一章>>本章小结

本章首先介绍了面向过程和面向对象这两个基本概念,面向对象程序设计的基础知识,讨论了C++语言突出的一些新特点,包括:

抽象、继承、封装和多态性等,这是我们学习以后各章内容的基础。

在第二部分中,讨论了C++的基本程序结构、作用域限定符:

:

、类型修饰符、函数原型、内联函数、带缺省值参数函数、动态内存的分配、引用、编译指令等,请能熟练地应用这些知识,以便能编制出符合C++要求的程序。

尤其C++的基本程序结构、函数原型、内联函数、带缺省值参数函数、动态内存的分配、引用等内容也是考试中的重点内容,希望学生能够结合实际编程掌握这些内容。

类型修饰符和编译指令,虽然是要求领

会,但是,我们认为它们也是很重要的内容,希望学有余力的同学能够掌握它们的深意。

对于面向对象程序设计基础知识,改变习惯重新思考只需识记,了解一下。

我们强调的是前两部分内容,也是考纲的重点内容。

        面向对象程序设计>>第二章>>内容提要

一、类

  C++语言的类就是一种用户自定义的数据类型,和其它数据类型不同的是,组成这种类型的不仅可以有数据,而且可以有对数据进行操作的函数,它们分别叫做类的数据成员和类的函数成员。

正是由于类拥有这两类成

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1