- 1、本文档共26页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
南京航空航天大学
课 程 设 计
课程名称 题目名称
学生学院
2014 年1月日
摘要
本实验报告主要关键字:
目 录
1实验设计目的及要求 3
1.1课题要求 3
1.2设计目的 3
2 3
2.1抽象类不能使用的情形 4
2.2抽象类能够使用的情形 4
3 虚拟函数 7
4 双向调用技术 13
4.1正向调用 13
4.2反向调用 14
4.2.1框架中的类调用同体系的子类 14
4.2.2跨体系的反向调用 17
4.3预设函数 19
5构造函数与反向调用技术 23
6总结 25
7参考文献 26
1实验设计目的及要求
1.1课题要求
课本P69(ex04-01.h);
P70~72((4);(5);(6);(7) 中的程序);
P73的VIP类、main函数;P74~75; P84~85(两个程序);
P86(上半部分的程序);
P90下半部分的程序,P91上半部分。
1.2设计目的
定义的类及类间关系虚拟函数、抽象类、反向调用技术的应用情况抽象类派生指针的应用情况构造函数与反向调用
2 抽象类
抽象类为包含纯虚函数的类,抽象类往往是为了实现面向对象中多态的概念,它有许多限制不能使用的情形与可以使用的情形。本章节一下主要讨论抽象类的应用情况和限制情况。本章节使用的程序背景参见Person.h文件(如下代码1所示),类间关系如图1所示。
class Person
{
protected:
char name[20];
public:
void SetName(char *na)
{
strcpy(name,na);
}
virtual void Display()=0;
};
class Customer:public Person
{
public :
virtual void Display()
{
coutCustomer:nameendl;
}
};
代码1
2.1抽象类不能使用的情形:
根据不同程序背景对各种情形进行测试:
1)不能做自变量的类型(参数类型),使用实例如void Disp(Person x);之后使用的时候又是Person x;Disp(x);
2)不能创建对象,使用实例如Person x;
3)不能成为函数的返回类型,使用实例如Person Disp();
4)不能用来转换对象,使用实力如Customer cust;((Person)cust).SetName(cyf);
2.2抽象类能够使用的情形
1)测试抽象类指针可以用来指向之类对象
在代码1上添加如下代码进行实现,具体代码参见P69_4程序
Customer cust;
cust.SetName(cyf);
Person *p=cust;
p-Display();
由于Display为虚函数,所以p虽然是抽象类指针,仍然能调用子类Customer的Display()函数,从上述程序结果可以得之抽象类指针可以指向子类的对象,但具体是否调用子类覆盖过的函数代码还需要根据具体的情形讨论。讨论参见第7点抽象类指针的应用情况分析。
2)测试抽象类指针可以当成函数的自变量
在代码1上添加如下代码进行实现,具体代码参见P69_5程序
void Set(Person *p)
{
p-SetName(Amy);
}
int main()
{
Customer cust;
cust.SetName(Linda);
Set(cust);
cust.Display();
return 0;
}
Set(cust);
cust.Display();
Set函数传递的是子类Customer的指针,Set函数中对指针指向的数据成员进行了新的赋值,且这种改变时持久性的,故主函数仍然调用Display(),其数据成员的值已经改变了。从上述程序结果可以得之指针可以当做函数的自变量
3)函数可以回传抽象类的指针
在代码1上添加如下代码进行实现,具体代码参见P69_6程序
Person *sub()
{
Customer *pc=new Customer();
pc-SetName(Tom);
return (Person*)pc;
}
int main()
{
Person *p=sub();
p-
文档评论(0)