C++暑期实习论文

上传人:飞****9 文档编号:130668302 上传时间:2020-04-30 格式:DOC 页数:5 大小:56.50KB
返回 下载 相关 举报
C++暑期实习论文_第1页
第1页 / 共5页
C++暑期实习论文_第2页
第2页 / 共5页
C++暑期实习论文_第3页
第3页 / 共5页
C++暑期实习论文_第4页
第4页 / 共5页
C++暑期实习论文_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《C++暑期实习论文》由会员分享,可在线阅读,更多相关《C++暑期实习论文(5页珍藏版)》请在金锄头文库上搜索。

1、暑假实习论文C+中的多态性与虚函数专业班级:软件工程0701班学生姓名:XXX学生学号:XXX指导老师:周海二00八年七月十三日C+中关于多态性与虚函数的问题因为本学期C+期未考试考到了多态性与虚函数的问题,据悉答题准确率不高,而实训期间老师又讲到了多态性与函数的问题,故在此讲述一下本人对多态性与虚函数的理解,并举例说明。多态是指同样的消息被不同类型的对象接收时,可以导致完全不同的行为,它是在有虚函数的类中使用指向对象的指针时发生的。多态性是面向对象程序设计语言中数据抽象和继承之外的第三个基本特征,它提供了接口与具体实现之间的另一层隔离,从而将“what”与“how”分离开来。多态性改善了代码

2、的组织性和可读性,同时也使创建的程序具有可扩展性,程序不仅在项目的最初创建期可以“扩展”,而且当在项目需要有新的功能时也能“扩展”。面向对象的多态性可以分为重载多态、强制多态、包含多态和参数多态四类,多态从实现的角度可以划分为编译时的多态和运行时的多态两类,按照绑定进行阶段的不同又可以分为静态绑定和动态绑定两种。多态性主要体现在重写和重载两个方面,需要通过虚函数才能实现,虚函数为C+提供了更为灵活的多态机制。多态性允许在一个类的层次结构中加入新的子类和方法,而不必更改已经应用这个层次结构接口的应用程序。据了解,虚函数是动态绑定的基础。在C+中,虚函数可以是友元函数,但不能是静态成员。虚函数的重

3、定义函数,无论是否使用virtual关键字,仍然是虚函数。虚函数经过派生之后,通过基类的指针,就可以使属于不同派生类的不同对象产生不同的行为,从而实现了运行时的多态。利用虚函数,可在基类和派生类中使用相同的函数名定义函数的不同实现,从而实现“一个接口,多种方式”。一般虚函数成员的声明语法如下: Virtual 函数类型 函数名(形参表)函数体例如:void Disp()coutMy name is name,and I teach cls classes.n;虚函数声明只能出现在类声明中的函数原型声明中,而不能在成员函数实现的时候出现。虚函数允许一个类型表达自己与另一个相似类型之间的区别,只要

4、这两个类型都是从同一个基类派生的。这种区别是通过从基类调用的那些函数行为的不同来表达的。要注意的是,仅仅需要在基类中声明一个函数为virtual,调用所有匹配基类声明行为的派生类函数都将使用虚机制。虽然可以在派生类声明前使用关键字virtual(这也是无害的),但这样会使程序段显得冗余和混乱。另外,运行时多态需要满足三个条件:首先,类之间要满足赋值兼容规则;其次,要声明虚函数;最后,要由成员函数来调用或者是通过指针、引用来访问虚函数。对后两者我们都容易理解,对于类之间的赋值兼容规则我们可如是理解:基类对象的指针可以指向派生类对象;派生类的对象可以向基类的对象赋值;派生类的对象可初始化向基类的引

5、用。C+语言还增加了纯的虚函数机制用来更好地设计包含多态性。对C+中多态性与虚函数的问题,还有很多方面的内容,这里仅对其中通过虚函数实现多态性进行了举例,烦请见谅。下面就C+中关于多态性与虚函数的问题对通过虚函数实现多态性这一语法要点进行举例说明。此例设计一个人员类Person,其中包含显示人员姓名的虚函数Disp(),然后派生出学生类Student和教授类Professor,最后在主函数中通过该虚函数实现多态性调用。声明了虚函数的源代码如附录所示,在Microsoft Visual Studio 2005中编译,调试运行可得如下结果:如果将Person类中的disp()函数前面的virtua

6、l去掉,则函数运行结果如下:可见,不使用虚函数便不能达到多态的效果。此外,代码编译过程中可能会遇到诸如:错误1error C2143: 语法错误 : 缺少“;”(在“*”的前面)e:07赵丽娟3901070118390107011807118.cpp错误2error C2334: “”的前面有意外标记;跳过明显的函数体e:07赵丽娟3901070118390107011807118.cpp的语法等错误提示而使编译失败,这些错误完全是因为我们的不细心所致,所以运行前要进行编译,并根据编译过程出现的错误提示对错误点进行修改。谨记:细节决定成败!附录(源代码):/07118.cpp#includeu

7、sing namespace std;class Personpublic:Person(char* s)name=new charstrlen(s)+1;strcpy(name,s);virtual void Disp()coutMy name is name.n; /声明虚函数protected:char* name;class Student:public Personpublic:Student(char* s,int g):Person(s),grade(g)void Disp()coutmy name is name,and my grade of Math is grade.n;private:int grade;class Professor:public Personpublic:Professor(char* s,int n):Person(s),cls(n)void Disp()coutMy name is name,and I teach clsDisp(); /将基类对象地址赋给基类指针Student y(Feiruizhen,86);p=&y; p-Disp(); /将派生类对象y地址赋给基类指针Professor z(MrChen,5);p=&z; p-Disp(); /将派生类z地址赋给基类指针return 0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 管理论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号