您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 类和对象2-继承与派生
试验二:类和对象2、继承与派生1、试验目的:(1)进一步加深对类和对象的理解。(2)掌握友元的概论和使用。(3)了解继承在面向对象程序中的重要作用。(4)进一步理解继承与派生的概念。(5)掌握通过继承派生出一个新的类的方法。2、试验内容(1)有以下程序:#includeiostreamusingnamespacestd;classStudent{public:Student(intn,floats):num(n),score(s){}voidchange(intn,floats){num=n;score=s;}voiddisplay(){coutnumscoreendl;}private:intnum;floatscore;};intmain(){Studentstud(101,78.5);stud.display();stud.change(101,80.5);stud.display();return0;}①.阅读此程序,分析其执行过程,然后上机运行,对比输出结果。②.修改上面的程序,在主函数增加一个全局函数fun,在fun函数中调用change和display函数。在fun函数中使用对象的引用(student&)作为形参。③.在mian函数中调用fun函数。④.达到的目的是,先输出对象的初始化值,然后改变其值,再输出新的值。(2)有以下程序#includeiostreamusingnamespacestd;classDate;classTime{public:Time(int,int,int);voiddisplay(Date&);private:inthour;intminute;intsec;};classDate{public:Date(int,int,int);friendvoidTime::display(Date&);private:intmonth;intday;intyear;};Time::Time(inth,intm,ints){hour=h;minute=m;sec=s;}voidTime::display(Date&da){coutda.month/da.day/da.yearendl;couthour:minute:secendl;}Date::Date(intm,intd,inty){month=m;day=d;year=y;}intmain(){Timet1(10,13,56);Dated1(12,25,2004);t1.display(d1);return0;}请分析和运行此程序,注意友元函数Time::display的作用。将程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Data类中将display声明为友元函数。在主函数中调用display函数,display函数分别引用Time和Data两个类的对象的私有数据,输出年、月、日和时、分、秒。修改后上机运行。注意:display函数中参数的顺序!(3)有以下程序A:将以下程序片断补充和改写成一个完整、正确的程序。用公用继承方式,在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序运行结果应输出以上5个数据。#includeiostream#includestringusingnamespacestd;classStudent{public:voidget_value(){cinnumnamesex;}voiddisplay(){coutnum:numendl;coutname:nameendl;coutsex:sexendl;}private:intnum;stringname;charsex;};classStudent1:publicStudent{public:voidget_value_1(){cinageaddr;}voiddisplay_1(){coutnum:numendl;//引用基类的私有成员,错误coutname:nameendl;//引用基类的私有成员,错误coutsex:sexendl;//引用基类的私有成员,错误coutage:ageendl;//引用派生类的私有成员,正确coutaddress:addrendl;}//引用派生类的私有成员,正确private:intage;stringaddr;};intmain(){Student1stud1;stud1.get_value();stud1.get_value_1();stud1.display();stud1.display_1();return0;}B:将以下程序修改、补充、写成一个完整、正确的程序。用私有继承方式,在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。#includeiostream#includestringusingnamespacestd;classStudent{public:voiddisplay(){coutnum:numendl;coutname:nameendl;coutsex:sexendl;}private:intnum;stringname;charsex;};classStudent1:privateStudent{public:voiddisplay_1(){display();coutage:ageendl;//引用派生类的私有成员,正确coutaddress:addrendl;}//引用派生类的私有成员,正确private:intage;stringaddr;};intmain(){Student1stud1;stud1.display_1();return0;}C:将以下程序修改、补充、写成一个完整、正确的程序。用保护继承方式,在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。#includeiostream#includestringusingnamespacestd;classStudent//声明基类{public://基类公用成员voiddisplay();protected://基类保护成员intnum;stringname;charsex;};voidStudent::display(){coutnum:numendl;coutname:nameendl;coutsex:sexendl;}classStudent1:protectedStudent//用protected继承方式声明一个派生类{public:voiddisplay1();private:intage;stringaddr;};voidStudent1::display1(){coutnum:numendl;//引用基类的保护成员,合法coutname:nameendl;//引用基类的保护成员,合法coutsex:sexendl;//引用基类的保护成员,合法coutage:ageendl;//引用派生类的私有成员,合法coutaddress:addrendl;//引用派生类的私有成员,合法intmain(){Student1stud1;//stud2是派生类student2的对象stud1.display1();//display是派生类中的公用成员函数return0;}
本文标题:类和对象2-继承与派生
链接地址:https://www.777doc.com/doc-7054121 .html