您好,欢迎来到爱站旅游。
搜索
您的当前位置:首页课程设计3

课程设计3

来源:爱站旅游
《面向对象程序设计》实验三

实验报告

1 实验目的:

了解面向对象程序设计中继承性、多态性的概念;

掌握单继承、多重继承中基类成员访问属性的变化规律及访问方法; 掌握类族中构造函数和析构函数的定义方法及调用顺序; 掌握虚函数的定义和使用方法; 2 实验任务及结果分析:

分别采用公有继承、私有继承、保护继承完成类的设计。

#include\"iostream\" #include\"string\" using namespace std; class Student {public:

void get_value()

{cin>>num>>name>>sex;} void display( )

{cout<<\"num: \"<class Student1:public Student {public:

void get_value_1() {cin>>num; cin>>name; cin>>sex; cin>>age; cin>>addr;} void display_1() {cout<<\"this student is:\"<private: int age; string addr; int num; string name; char sex;}; int main()

{Student1 Stu1;

Stu1.get_value_1(); Stu1.display_1(); return 0;}

对有继承关系的程序结构进行分析。

问题:

1.在main函数中能否用通过派生类B的对象b1来引用从基类A继承来的成员i,j,k?

i可以,j,k无法被继承。

2.派生类B中的成员函数能否调用基类A中的成员函数f1、f2? 都可以被访问。

3.派生类B中的成员函数能否引用基类A中的i,j,k? i,j也已被引用,k不能。

4.能否在main函数中通过C类对象c1引用基类A的成员i,j,k类B的成员? 只有i能够被访问。

5.能否在main函数中用C类对象c1以c1.f1(),c1.f2(),c1.f3(),c1.f4()的形式调用f1(),f2(),f3(),f4()?

F2()无法被调用。

6.派生类C的成员函数f4能否调用基类A的成员函数f1,f2及B类中的f3?

可以。

继承关系下,构造函数的调用顺序 #include using namespace std; class A {

public:

A(){a=0;b=0;}

~A(){cout<<\"A has been destructe!\"<void display(){cout<<\"a=\"<private: int a; int b; };

class B : public A {

public: B(){c=0;}

~B(){cout<<\"B has been destructe!\"<B(int i,int j):A(i,j){c=0;}

B(int i,int j,int k):A(i,j){c=k;} void display1() {display();

cout<<\" c=\"<private: int c; };

int main() { B b1; B b2(1); B b3(1,3); B b4(1,3,5); b1.display1(); b2.display1(); b3.display1(); b4.display1(); return 0;

} 从b1到b4依次调用

析构函数先调用B再调用A。

参照教材例6.1,定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。写一个虚函数用于输出类族中各类的名字。分析如果该函数不是虚函数,输出又将是怎样?为什么?

#include\"iostream\" using namespace std; class point { public: point(float a=0,float b=0); void display_x(); void display_y(); protected: float x,y; };

point::point(float a,float b) { x=a; y=b; }

void point::display_x() { cout<< “x=”<void point::display_y() { cout<< “y=”<class circle : public point {

public: circle(float a=0,float b=0,float c=0); void display_radius(); virtual void display_area(); protected: float r; };

circle: : circle(float a,float b,float c):point(a,b),r(c){} void circle::display_radius() { cout<<”r=”<< r<void circle::display_area() { cout<< “circle area=”<<3.14*r*r<class cylinder:public circle {

public: cylinder(float a=0,float b=0,float c=0,float d=0); void display_height(); void display_area(); void display_volume(); protected: float h;};

cylinder::cylinder(float a,float b,float c,float d):circle(a,b,c),h(d){} void cylinder::display_height() {cout<< “height=”<void cylinder::display_area()

{cout<<” cylinder area=”<<2*3.14*r*r+2*3.14*r*h<void cylinder::display_volume()

{cout<<” cylinder volume=”<< 3.14*r*r*h<void main() { circle c1(1,2,3); cylinder c2(1,2,3,4); c1.display_x(); c1.display_y(); c1.display_radius(); c2.display_height(); c2.display_volume(); circle *p=&c1; p->display_area(); p=&c2; p->display_area(); }

3总结或感悟(对运行结果所作的分析以及本次调试程序所取得的经验。如果程序未能通过,分析其原因。)

在实验一中,将派生类的继承改为protected private 都能正常运行。实验四中,

C1,C2给定的X,Y都相同。若改变C2中X,Y,依然显示的是C1中X,Y。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- azee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务