📄 cjj128.htm
字号:
style="FONT-SIZE: 18px" vAlign=bottom
width="85%" class="body18black">C++习题与解析(继承和派生-02)</TD>
<BR>
</TR>
<TR>
<TD align=middle width="100%"><BR>
</TD>
</TR>
<TR>
<TD align=middle width="100%">
<!--下面的这一句是设置阅读文本区的宽度-->
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="75%">
<TBODY>
<TR>
<TD align=middle width="100%"></TD>
</TR>
<TR>
<TD class="body12black" >
6.6 编写一个程序设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight。小车类car是它的私有派生类其中包含载人数passenger_load。卡车类truck是vehicle的私有派生类其中包含载人数passenger_load和载重量payload,每个类都有相关数据的输出方法。<BR></FONT>解:<BR> vehicle类是基类由它派生出car类和truck类将公共的属性和方法放在vehicle类中。<BR>本题程序如下:<BR>本程序的执行结果如下:<BR>#include<iostream.h><BR>class vehicle // 定义汽车类<BR>{<BR> protected:<BR> int wheels; // 车轮数<BR> float weight; // 重量<BR> public:<BR> vehicle(int wheels,float weight);<BR> int get_wheels();<BR> float get_weight();<BR> float wheel_load();<BR> void show();<BR>};<BR>class car:public vehicle // 定义小车类<BR>{<BR> int passenger_load; // 载人数<BR> public:<BR> car(int wheels,float weight,int passengers=4);<BR> int get_passengers();<BR> void show();<BR>};<BR>class truck:public vehicle // 定义卡车类<BR>{<BR> int passenger_load; // 载人数<BR> float payload; // 载重量<BR> public:<BR> truck(int wheels,float weight,int passengers=2,float max_load=24000.00);<BR> int get_passengers();<BR> float efficiency();<BR> void show();<BR>};<BR>vehicle::vehicle(int wheels,float weight)<BR>{<BR> vehicle::wheels=wheels;<BR> vehicle::weight=weight;<BR>}<BR>int vehicle::get_wheels()<BR>{<BR> return wheels;<BR>}<BR>float vehicle::get_weight()<BR>{<BR> return weight/wheels;<BR>}<BR>void vehicle::show()<BR>{<BR> cout << "车轮:" << wheels << "个" << endl;<BR> cout << "重量:" << weight << "公斤" << endl;<BR>}<BR>car::car(int wheels, float weight,<BR>int passengers) :vehicle (wheels, weight)<BR>{<BR> passenger_load=passengers;<BR>}<BR>int car::get_passengers ()<BR>{<BR> return passenger_load;<BR> }<BR>void car::show()<BR> {<BR> cout <<" 车型:小车" << endl;<BR> vehicle::show();<BR> cout << "载人:" << passenger_load << "人" << endl;<BR> cout << endl;<BR> }<BR>truck:: truck(int wheels, float weight,int passengers, float max_load):vehicle(wheels,weight)<BR>{<BR> passenger_load=passengers;<BR> payload=max_load;<BR>}<BR> int truck::get_passengers()<BR>{<BR> return passenger_load;<BR>}<BR>float truck::efficiency()<BR>{<BR> return payload/(payload+weight);<BR>}<BR>void truck::show()<BR>{<BR> cout <<"车型:卡车" << endl;<BR> vehicle:: show ();<BR> cout << "载人:" << passenger_load << "人" << endl;<BR> cout << "效率:" << efficiency() << endl;<BR> cout << endl;<BR>}<BR>void main ()<BR>{<BR> car car1(4,2000,5);<BR> truck tru1(10,8000,3,340000);<BR> cout << "输出结果" << endl;<BR> car1. show ();<BR> tru1. show ();<BR>}<BR><BR> 输出结果<BR> 车型:小车<BR> 车轮:4个<BR> 重量:2000公斤<BR> 载人:5人<BR><BR> 车型:卡车<BR> 车轮:10个<BR> 重量:8000公斤<BR> 载人:3人<BR> 效率:0.977012<BR><BR>--------------------------------------------------------<BR><BR><FONT color=#0000ff>6.7 设计一个圆类circle和一个桌子类table,另设计一个圆桌类roundtable,它是从前两个类派生的,要求输出一个圆桌的高度、面积和颜色等数据。<BR></FONT>解:<BR> circle类包含私有数据成员radius和求圆面积的成员函数getarea();table类包含私有数据成员height和返回高度的成员函数getheight()。roundtable类继承所有上述类的数据成员和成员函数,添加了私有数据成员color和相应的成员函数。本题程序如下:<BR>#include<iostream.h><BR>#include<string.h><BR>class circle<BR>{<BR> double radius;<BR>public:<BR> circle(double r) { radius=r; }<BR> double getarea() { return radius*radius*3.14; }<BR>};<BR>class table<BR>{<BR> double height;<BR>public:<BR> table(double h) { height=h; }<BR> double getheight() { return height; }<BR>};<BR>class roundtable : public table,public circle<BR>{<BR> char *color;<BR>public:<BR> roundtable(double h, double r, char c[]) : circle (r) , table (h)<BR> {<BR> color=new char[strlen(c)+1];<BR> strcpy (color, c);<BR> }<BR> char *getcolor() { return color; }<BR> };<BR>void main()<BR>{<BR> roundtable rt(0.8,1.2,"黑色");<BR> cout << "圆桌属性数据:" << endl;<BR> cout << "高度:" <<rt.getheight() << "米" << endl;<BR> cout << "面积:" <<rt.getarea() << "平方米" << endl;<BR> cout << "颜色:" <<rt.getcolor() << endl;<BR>}<BR>本程序的执行结果如下:<BR> 圆桌属性数据:<BR> 高度:0.8米<BR> 面积:4.5216平方米<BR> 颜色:黑色<BR><BR>-------------------------------------------------------<BR><BR><FONT color=#0000ff>6.8 设计一个虚基类base,包含姓名和年龄私有数据成员以及相关的成员函数,由它派生出领导类leader,包含职务和部门私有数据成员以及相关的成员函数。再由base派 生出工程师类engineer,包含职称和专业私有数据成员以及相关的成员函数。然后由1eda和engineer类派生出主任工程师类chairman。采用一些数据进行测试。<BR></FONT>解:<BR> 由于chairman类从leader类和engineer类派生,而leader类和engineer类都是从base类派生的,所以为了使base只存一个副本,必须采用虚拟派生的方法。<BR>本题程序如下:<BR>#include<iostream.h><BR>#include<string.h><BR>class base // 基类<BR>{<BR> char* name;// 姓名<BR> int age; // 年龄<BR>public:<BR> base(){}<BR> void setname(char na[])<BR> {<BR> name=new char[strlen(na)+1];<BR> strcpy(name,na);<BR> }<BR> void setage(int a)<BR> {<BR> age=a;<BR> }<BR> char* getname() { return name; } <BR> int getage() { return age; }<BR>};<BR>class leader:virtual public base // 领导类<BR>{<BR> char *job;//职务<BR> char *dep;//部门<BR>public:<BR> leader() { }<BR> void setjob(char jb[])<BR> {<BR> job=new char[strlen(jb)+1];<BR> strcpy (job, jb);<BR> }<BR> void setdep(char dp[])<BR> {<BR> dep=new char [strlen (dp) +1] ;<BR> strcpy (dep, dp);<BR> }<BR> char *getjob() { return job; }<BR> char *getdep() { return dep; }<BR>};<BR>class engineer:virtual public base // 工程师类<BR>{<BR> char *major; // 专业<BR> char *prof; // 职称<BR>public:<BR> engineer () { }<BR> void setmajor(char maj [])<BR> {<BR> major=new char[strlen(maj)+1];<BR> strcpy (major,maj);<BR> }<BR> void setprof(char pf[])<BR> {<BR> prof=new char[strlen(pf)+1];<BR> strcpy (prof, pf);<BR> }<BR> char*getmajor() {return major; }<BR> char*getprof() {return prof; }<BR>} ; <BR>class chairman:public leader,public engineer // 主任工程师类<BR>{ } ;<BR>void main()<BR>{<BR> chairman c;<BR> c.setname("李明");<BR> c.setage(42);<BR> c.setjob("处长");<BR> c.setdep("设计处");<BR> c.setmajor("电站锅炉设计");<BR> c.setprof("高级工程师");<BR> cout<< "输出结果:"<<endl;<BR> cout << " " << c.getname() << ",年龄" << c.getage()<<"岁,担任" <<c.getdep() <<c.getjob() <<","<<endl;<BR> cout << " " << c.getprof() << ",从事" << c.getmajor()<< "专业" << "。 " << endl;<BR>}<BR><BR>本程序的执行结果如下:<BR> 输出结果:<BR> 李明,年龄42岁,担任设计处处长,<BR> 高级工程师,从事电站锅炉设计专业。<BR><BR>-----------------------------------------------------------<BR><BR></P><br>
</TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
<TR>
<TD height=35 width="100%">
<DIV align=center></DIV>
</TD>
</TR>
</TBODY>
</TABLE>
</TD></TR></TBODY>
</TABLE>
</TD></TR></TBODY>
</TABLE>
</TD></TR></TBODY>
</TABLE>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width=750>
<TBODY>
<TR>
<TD bgColor=#c1c1c1 height=1></TD>
</TR>
</TBODY>
</TABLE>
<TABLE align=center border=1 cellPadding=0 cellSpacing=1
style="BORDER-COLLAPSE: collapse" width=550>
<TBODY>
<td align=center>
<div align="center">
<p><a href=mailto:jjsun36@sohu.com ><span class="body14black">mailto:jjsun36@sohu.com</span></a><span class="body12red">
热线电话:0523-4864559</span></p>
</div>
</td>
</TBODY>
</TABLE>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -