您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > c++面向对象程序设计复习资料
C++复习目录•一、C++语言概述•二、类和对象•三、继承与派生•四、多态性•五、总结一、C++语言概述•C++语言的特点•C++语言对C语言扩充和增强的具体体现•C++的优点C++语言的特点•全面兼容C–它保持了C的简洁、高效和接近汇编语言等特点;–对C的类型系统进行了改革和扩充;–C++也支持面向过程的程序设计,不是一个纯正的面向对象的语言;•支持面向对象的方法C++语言对C语言扩充和增强的具体体现•注释在C语言块注释的形式/*ExplanationSentence*/的基础上,C++语言提供了一种新的单行注释形式://ExplanationSentence,即用“//”表示注释开始,从该位置直到当前行结束的所有字符都被作为注释。•更加灵活的变量说明在传统的C语言中,局部变量的说明必须集中放在执行代码的前面,数据说明语句和执行语句的混合将引起编译错误。而在C++中,可以在程序代码块的任何地方进行局部变量的说明。比如下面的代码在C语言中是不正确的,在C++语言中却可以正常运行。for(inti=1;i=100;i++);C++语言对C语言扩充和增强的具体体现•更加严格的函数原型说明C++摒弃了C语言对函数原型随意简化的方式,C++语言要求编程者为函数提供完整的原型,包括全部参数的类型和返回值得说明。例如,有字符型和双精度类型两个参数、返回整型值的函数f,原型应该写为:intf(char,double);而C语言中允许将这个原型写成f();。在函数原型说明中,参数名可有可无,并且可以和函数定义中的参数名不一致。C++语言对C语言扩充和增强的具体体现•增加了函数重载机制重载是程序语言领域的重要概念。常规语言中最典型的例子是+、-、×、/等各种算术运算符的重载,这些符号可以同时用来表示多种类型数据之间的运算,这种对一个名字或一个符号赋予多重意义的情况就叫重载。C++语言增加了C语言所没有的函数重载机制。对一个函数名可以给出多个函数定义,只要这些定义可以通过参数个数或类型的不同区别开来即可。C++还允许对系统中预先定义的运算符号进行重载,增加新的定义。这样做的优点是在今后对新定义类型的变量进行运算时,计算公式写起来方便自然。C++语言对C语言扩充和增强的具体体现•函数缺省参数C++中允许函数有缺省参数。所谓缺省,是指函数调用时可以不给出实际的参数值。有缺省参数的函数定义的实例:intf(inta,intb=1){returna*b;}此后,函数调用f(3,1)和f(3)将返回同样的结果。•更加方便的动态存储分配C++为了提高内存管理上的灵活性,提供了动态内存分配合释放的操作符new和delete,用来增强C语言中原有的函数malloc()和free();C++语言对C语言扩充和增强的具体体现•增加了内联函数(InlineFunction)C++提供了内联函数,用以代替C语言中的宏。宏的处理机构是预处理器而不是编译器,它虽然可以提高效率,但是却不能实现函数调用所拥有的参数类型检查等机制。内联函数不但能够象宏那样节约函数调用时保存现场所需的系统开销,提高程序执行效率,还保留了函数进行参数类型检查的机制;并且C++语言中的宏是不能够存取对象私有成员变量的,但是使用内联函数,则没有这一限制。C++语言对C语言扩充和增强的具体体现•输入/输出流机制C++保留了C语言标准库中各种输入/输出函数,而且提供了一套新的输入/输出机制――流机制。比如向标准输出输出一个字符串:coutC++isbeautiful!;或者由标准输入读一个整数,赋给变量ainta;cina;流式输入/输出运算符能够根据变量类型自动确定数据交换过程中的转换方式,还可以定义、的重载,方便了编程者自定义类型的数据的输入/输出。C++语言对C语言扩充和增强的具体体现•作用域限定运算符::作用域限定运算符::,用于对当前作用域之外的同名变量进行访问。例如在下面的例子中,我们可以利用::实现在局部变量a的作用域范围内对全局变量a的访问。#includeiostream.hinta;voidmain(){floata;a=3.14;::a=6;coutlocalvariablea=aendl;coutglobalvariablea=::aendl;}程序执行结果如下:localvariablea=3.14globalvariablea=6C++的优点•与C语言兼容,既支持面向对象的程序设计,也支持结构化的程序设计。同时,熟悉C语言的程序员,能够迅速掌握C++语言。•修补了C语言中的一些漏洞,提供更好的类型检查和编译时的分析。使得程序员在C++环境下继续写C代码,也能得到直接的好处。•生成目标程序质量高,程序执行效率高。一般来说,用面向对象的C++编写的程序执行速度与C语言程序不相上下。C++的优点•提供了异常处理机制,简化了程序的出错处理。利用throw、try和catch关键字,出错处理程序不必与正常的代码紧密结合,提高了程序的可靠性和可读性。•函数可以重载及可以使用缺省参数。重载允许相同的函数名具有不同参数表,系统根据参数的个数和类型匹配相应的函数。缺省参数可以使得程序员能够以不同的方法调用同一个函数,并自动对某些缺省参数提供缺省值。C++的优点•提供了模板机制。模板包括类模板和函数模板两种,它们将数据类型作为参数。对于具体数据类型,编译器自动生成模板类或模板函数,它提供了源代码复用的一种手段。二、类和对象•类与对象概述•构造函数与析构函数•拷贝构造函数•类作用域•const成员函数•静态成员类与对象概述•类是具有相同属性和行为的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和行为两个部分。•利用类可以实现数据的封装、隐藏、继承与派生。•利用类易于编写大型复杂程序,其模块化程度比C中采用函数更高。类与对象概述•类的声明形式class类名称{public:公有成员(外部接口)private:私有成员protected:保护型成员};程序模型则是若干个对象的相互作用——一堆“鸡蛋”类与对象概述•公有属性成员在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有属性的数据和函数。通俗讲是“谁都可以使用”。•私有属性成员在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。通俗讲是“谁都不可以使用,只供我自己用”。•保护属性成员在关键字protected后面声明,允许本类及子类中的函数访问,通俗讲是“我的子孙可以使用,外人不可用”。类与对象概述•类的成员类与对象概述•成员数据与一般的变量声明相同,但需要将它放在类的声明体中。可放置在类中的任何位置;不可声明时初始化;不可声明为extern、register,但可以是static或const。类与对象概述•成员函数可以仅在类中说明原型,而在类外给出函数体实现,并在函数名前使用类名加以限定。也可以直接在类中给出函数体,形成成员函数的隐含内联。允许成员函数为重载函数和带默认形参值的函数。对成员数据的使用不再遵循“先声明后使用”的原则,即可以放置在类中任意位置。凡被调用的成员函数一定要有函数实现。类与对象概述•内联成员函数为了提高运行时的效率,对于较简单的函数可以声明为内联形式。内联函数体中不要含有复杂结构(如循环语句和switch语句)。在类中声明内联成员函数的方式:–将函数体放在类的声明中——隐式声明。–使用inline关键字——显式声明。类与对象概述•对象类的对象是该类的某一特定实体,即类类型的变量。定义对象时,系统会为每一个对象分配自己的存储空间,该空间只保存数据,函数代码是所有对象共享的。声明形式:类名对象名;例:ClockmyClock;构造函数与析构函数•构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。•初始化是指对象(变量)诞生的那一刻即得到原始值的过程。是动词。对象声明然后赋值,经历了状态由不确定到确定的过程。构造函数与析构函数•构造函数的特点:与类同名;无返回类型;通常是公有成员;在对象创建时由系统自动调用,亦可由程序员显式调用,但不可用对象调用;如果程序中未声明,则系统自动产生出一个默认形式的构造函数,它无参,函数体为空;允许为内联函数、重载函数、带默认形参值的函数;是可以使用初始化列表的两函数之一(特权);不可以是常函数,亦不可是虚函数;天然具有类型转换功能,除非用explicit关闭。构造函数与析构函数•构造函数举例classClock{public:Clock(intNewH,intNewM,intNewS);//构造函数voidSetTime(intNewH,intNewM,intNewS);voidShowTime();private:intHour,Minute,Second;};构造函数与析构函数•构造函数的实现:Clock::Clock(intNewH,intNewM,intNewS){Hour=NewH;Minute=NewM;Second=NewS;}voidmain(){Clockc(0,0,0);//隐含调用构造函数,将初始值作为实参。c.ShowTime();}构造函数与析构函数•构造函数显式调用#includeiostream.hclasstree//定义类tree{public:tree(inti):ages(i){}//构造函数voidgrow(intyears);//计算树的年龄{ages+=years;}voidage();//显示树的年龄{cout树的年龄为:agesendl;}private:intages;//私有数据成员};构造函数与析构函数•构造函数显式调用voidmain(){intage,year;cout请输入树的年龄:;//提示用户输入年龄cinage;treepTree=newtree(age);//显式调用产生无名对象pTree-age();//显示树的年龄cout请输入树的生长年限:;cinyear;pTree-grow(year);//计算树的年龄pTree-age();//显示树的年龄}构造函数与析构函数•析构函数完成对象被删除前的一些清理工作(恰与构造函数对称)。在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。不接受任何参数,亦无法重载。构造函数与析构函数•析构函数的调用时机}或文件尾;delete(有条件地);catch()当中途退出程序时(exit()、abort())不调用析构函数构造函数与析构函数•构造函数和析构函数举例#includeiostreamusingnamespacestd;ClassPoint{public:Point(intxx,intyy);~Point();//...其它函数原型private:intX,intY;};构造函数与析构函数•构造函数和析构函数举例Point::Point(intxx,intyy){X=xx;Y=yy;}Point::~Point(){}//...其它函数的实现略拷贝构造函数拷贝构造函数是一种特殊的构造函数,其形参为本类的对象引用class类名{public:类名(形参);//构造函数类名(类名&对象名);//拷贝构造函数原型...};类名::类名(类名&对象名)//函数的实现{函数体}拷贝构造函数•拷贝构造函数定义classPoint{public:Point(intxx=0,intyy=0){X=xx;Y=yy;}Point(Point&p);intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};拷贝构造函数•拷贝构造函数定义Poi
本文标题:c++面向对象程序设计复习资料
链接地址:https://www.777doc.com/doc-3534795 .html