1、实验二 类及类的继承C+与数据结构实验指导书实验二 类及类的继承一、 实验目的1、熟悉并掌握类的概念及定义类的格方法;2、掌握类对象的定义;3、掌握构造函数和析构函数的含义与作用以及定义方式和实现方法;4、理解继承的含义,掌握派生类的定义方法和实现;5、理解多继承的概念及多继承中构造与析构的应用。二、 实验内容1、定义一个学生类,数据成员有学号、姓名、年龄,并使用成员函数实现如下功能:(1)使用成员函数实现输入、输出;(2)使用构造函数和析构函数实现对数据的输入、输出;编写主函数使用这个类,实现对学生数据的赋值和输出。#include#includeusing namespace std;cl
2、ass studentprivate: int number; string name; int age;public: student(int a,string b,int c) number=a;name=b;age=c; cout学号:number 姓名:name 年龄:ageendl; student() cout学号:number 姓名:name 年龄:age Destructed.endl; ;int main() student s1(1412010708,雷宇,20); student s2(1412010709,李嘉锡,18); student s3(1412010710,刘
3、奇瑞,19); return 0;2、定义日期类Date。要求:(1)可以设置日期;(2)日期加一天操作;(3)输出函数,输出格式为“XXXX年XX月XX日”;(4)编写主函数,定义对象,完成相应功能。#include using namespace std;/判断year是否是闰年bool isLeapYear(int year) return (year%400=0 | (year%4=0 & year%100!=0);/日期类class Dateprivate: int year; int month; int day;public: Date() Date(int year, int
4、month, int day) this-year = year; this-month = month; this-day = day; /1.设置日期 void setDate(int year, int month, int day) this-year = year; this-month = month; this-day = day; /2.在当前日期的基础上增加一天 void addOneDay() day+; switch(month) /a.讨论1,3,5,7,8,10月份 case 1: case 3: case 5: case 7:case 8:case 10: if(d
5、ay 31) day -= 31; month+; break; /b.讨论12月份 case 12: if(day 31) day =1; month=1; year+; break; /c.讨论4,6,9,11月份 case 4: case 6: case 9: case 11: if(day 30) day -= 30; month+; break; /d.讨论2月份 case 2: if(isLeapYear(year) if(day 29) day -= 29; month+; else if(day 28) day -= 28; month+; break; default:cou
6、terror!; break; /3.输出函数,输出格式为:XXXX年XX月XX日,如2010年4月11日 void display() coutyear年month月day日yearmonthday; now.setDate(year, month, day); return now; void main() Date now = Date(); cout请输入日期(XXXX XX XX); now = InputDate(); cout日期:; now.display(); now.addOneDay(); cout一天后:; now.display();/设置日期:北京奥运会 cout设
7、置新日期endl; now.setDate(2008, 8, 8); cout新日期:; now.display(); now.addOneDay(); cout一天后:; now.display();3、编写一个程序计算出球、圆柱和圆锥的表面积和体积。要求:(1)定义一个基类,至少含有一个数据成员半径,并设为保护成员;(2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数;(3)编写主函数,求球、圆柱、圆锥的表面积和体积。#include #include using namespace std;const double pi=3.1415926; class cir
8、cle /基类圆 public: circle(double rad)r=rad; protected: double r; ; class ball:public circle /球类 public: ball(double rad):circle(rad) void com_surface()surface=4*pi*r*r; void com_volume()volume=4*pi*r*r*r/3; double get_surface()return surface; double get_volume()return volume; private: double surface;
9、double volume; ; class taper:public circle / 圆锥类 public: taper(double rad,double length):circle(rad) l=length; void com_surface()surface=pi*l*r+pi*r*r; void com_volume()volume=pi*r*r*sqrt(l*l-r*r)/3; double get_surface()return surface; double get_volume()return volume;private: double l; /圆锥侧长double
10、surface; double volume; ; class column:public circle /圆柱类 public: column(double rad,double high):circle(rad) h=high; void com_surface()surface=pi*r*r*2+2*pi*r*h; void com_volume()volume=pi*r*r*h; double get_surface()return surface; double get_volume()return volume; private: double h; /圆柱高 double sur
11、face; double volume; ; void main() ball b(3); _surface(); _volume(); cout该球的表面积是:b.get_surface()endl; cout该球的体积是:b.get_volume()endl; cout-endl;taper t(3,5); _surface(); _volume(); cout该圆锥的表面积是:t.get_surface()endl; cout该圆锥的体积是:t.get_volume()endl; cout-endl;column c(3,5); _surface(); _volume(); cout该圆
12、柱的表面积是:c.get_surface()endl; cout该圆柱的体积是:c.get_volume()endl; 4、输入以下程序,分析运行结果。#include using namespace std;class B1public: B1(int i) b1 = i; cout构造函数 B1.b1endl; void print() coutb1endl; private: int b1;class B2public: B2(int i) b2 = i; cout构造函数 B2.b2endl; void print() coutb2endl;private: int b2;class
13、B3public: B3(int i) b3 = i; cout构造函数 B3.b3endl; int getb3() return b3; private: int b3;class A : public B2, public B1public: A(int i, int j, int k, int l):B1(i), B2(j), bb(k) a = l; cout构造函数 A.aendl; void print() B1:print(); B2:print(); coutaendl;private: int a; B3 bb;void main() A aa(1, 2, 3, 4); aa.print(); 修改上面的4个类,添加析构函数,在析构函数中输出各私有数据成员的值。并分析结果。三、实验要求1、写出程序,并调试程序,要给出测试数据和实验结果。2、整理上机步骤,总结经验和体会。完成实验报告和上交程序
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1