C++程序设计笔记.docx
- 文档编号:9542365
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:20
- 大小:29.47KB
C++程序设计笔记.docx
《C++程序设计笔记.docx》由会员分享,可在线阅读,更多相关《C++程序设计笔记.docx(20页珍藏版)》请在冰豆网上搜索。
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
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 笔记