实验7 继承与派生

合集下载

c 继承与派生实验报告

c 继承与派生实验报告

c 继承与派生实验报告
C 继承与派生实验报告
实验目的:通过实验,掌握C语言中继承与派生的概念和使用方法,加深对面向对象编程的理解。

实验内容:在C语言中,继承与派生是面向对象编程中非常重要的概念。

在本次实验中,我们将通过一个简单的例子来演示C语言中的继承与派生的用法。

首先,我们定义一个基类(父类)Person,包括姓名和年龄两个成员变量,以及一个显示信息的成员函数。

然后,我们定义一个派生类(子类)Student,继承自Person类,新增一个成员变量学号,并重写显示信息的成员函数。

在实验中,我们首先创建一个Person对象,设置姓名和年龄,然后调用显示信息函数,观察结果。

接着,我们创建一个Student对象,设置姓名、年龄和学号,再次调用显示信息函数,观察结果。

实验结果:通过实验,我们成功实现了C语言中的继承与派生。

我们发现,通过继承,子类Student可以直接使用父类Person中的成员变量和成员函数,同时可以新增自己的成员变量和函数。

这样的设计使得代码更加简洁和灵活,提高了代码的复用性和可维护性。

结论:C语言中的继承与派生是面向对象编程中非常重要的概念,通过本次实验,我们深入理解了这一概念的用法和意义。

掌握了继承与派生的方法后,我们可以更加灵活地设计和编写程序,提高代码的质量和效率。

总结:通过本次实验,我们对C语言中的继承与派生有了更深入的理解,加深了对面向对象编程的认识。

在今后的学习和工作中,我们将更加灵活地运用继承与派生的方法,提高代码的质量和效率。

C 继承与派生实验报告

C  继承与派生实验报告

C 继承与派生实验报告C 继承与派生实验报告引言:在面向对象的编程中,继承与派生是重要的概念。

通过继承,我们可以从已有的类中派生出新的类,并且可以在新的类中添加额外的属性和方法。

本实验旨在通过实际的编程实践,深入理解C语言中的继承与派生。

实验过程:首先,我们创建了一个基类Animal,其中包含了一个成员变量name和一个成员函数eat。

然后,我们创建了两个派生类Dog和Cat,它们分别继承了Animal类,并且在其中添加了各自特有的成员函数bark和meow。

接着,我们创建了一个对象dog和一个对象cat,并分别调用了它们的成员函数eat、bark 和meow。

实验结果:通过运行程序,我们可以看到dog对象调用了eat和bark函数,而cat对象调用了eat和meow函数。

这说明继承与派生的机制正常工作,派生类可以继承基类的属性和方法,并且可以在派生类中添加新的属性和方法。

实验分析:继承与派生是面向对象编程的重要概念,它可以使得代码的复用性更高,同时也增加了代码的灵活性。

通过继承,派生类可以继承基类的属性和方法,这样可以减少代码的冗余,并且可以在派生类中添加新的功能。

在本实验中,Dog 和Cat类分别继承了Animal类,这样它们就拥有了相同的属性name和方法eat。

然后,通过在派生类中添加新的方法bark和meow,我们可以实现不同的行为。

继承与派生的应用:继承与派生在实际的软件开发中有着广泛的应用。

例如,在一个图形界面程序中,可以定义一个基类Widget,它包含了一些基本的属性和方法,然后可以通过派生类Button和TextBox来创建具体的按钮和文本框。

这样,我们可以通过继承和派生的方式,实现不同的界面元素,并且可以在派生类中添加新的功能,如按钮的点击事件和文本框的输入验证。

继承与派生的注意事项:在使用继承与派生的过程中,我们需要注意一些问题。

首先,派生类可以访问基类的公有成员,但不能访问基类的私有成员。

继承和派生实验报告

继承和派生实验报告

实验目的与要求:1.掌握类的继承与派生关系以及实验方法,理解类的层次结构。

2.掌握派生类构造函数初始化基类成员和对象成员的方法。

3.掌握内联函数和默认函数。

4.掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。

实验过程及内容:1.实践教程实验二十二P81范例:定义一个继承与派生关系的类体系,在派生类中访问基类成员。

①先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员;②以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数;③定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。

编程测试所定义的类体系。

本实验教程中有源码,请自行运行,体会和熟悉继承与派生的基本概念及实现方法,掌握派生类构造函数初始化基类成员和对象成员的方法等。

2. 实践教程P83编程:多层派生练习,由上题Point类和Circle类继续派生出Cylinder类。

要求计算圆柱的底面积、侧面积、全面积和体积。

请编写所有完整的成员函数,并编写主函数进行验证。

数据处理1.(1)(2)j结果报错,原因是派生类中的成员函数不能访问基类中的私有成员。

(3)在Line类中添加两个数据成员。

2. #include <iostream>#include <cmath>using namespace std;#define PI 3.14159class Point{friend class Line;protected:double x, y ;public:Point(){x = 0 ; y = 0 ; }Point(double xv,double yv){ x = xv; y = yv; }double Area(){return 0;}void Show() {cout<<"x="<<x<<' '<<"y="<<y<<endl;}};class Circle :public Point{protected:double radius;public:Circle(){ x = 0; y = 0; radius = 0; }Circle(double xv,double yv,double vv):Point(xv,yv){ //调用基类构造函数radius = vv;}Circle(Circle & cir):Point(cir){ //按赋值兼容规则cir可为Point实参radius=cir.radius;}Circle & operator=(Circle & cir){this->Point::operator=(cir); //在派生类中定义重载的拷贝赋值操作符有固定的标准格式radius=cir.radius;return *this;}double Area(){return PI*radius*radius;}void Show()cout<<"x="<<x<<' '<<"y="<<y<<" radius="<<radius<<endl; //访问基类的数据成员}};class Cylinder:public Circle {double high;public:Cylinder(){ x = 0; y = 0; radius = 0;high=0; }Cylinder(double xv,double yv,double vv,double kv):Circle(xv,yv,vv){ //调用基类构造函数high=kv;}Cylinder(Cylinder & cyl):Circle(cyl){ //按赋值兼容规则cyl可为Cylinder实参high=cyl.high;}Cylinder & operator=(Cylinder & cyl){this->Circle :: operator=(cyl); //在派生类中定义重载的拷贝赋值操作符有固定的标准格式high=cyl.high;return *this;}double ceArea(){return 2*PI*radius*high;}double quArea(){return ceArea()+2* Area();}double volume(){return Area()*high;}void Show(){cout<<"x="<<x<<' '<<"y="<<y<<' '<<"radius="<<radius<<' '<<"high="<<high<<endl; //访问基类的数据成员};class Line{Point start,end; //对象成员public:Line(){} //对象成员初始化Line(double xv1,double yv1,double xv2,double yv2) :start(xv1,yv1),end(xv2,yv2){ }double GetLength() {return sqrt((start.x-end.x)*(start.x-end.x)+(start.y-end.y)*(start.y-end.y));}double Area(){return 0;}void Show(){cout<<"start point:\n";start.Show();cout<<"end point:\n";end.Show();}};int main(){Point pt(0,0);Circle cl1(100,100,10),cl2(cl1),cl3;Cylinder h1(50,50,20,30),h2(h1),h3;Line ln1(0,0,100,100),ln2;cout<<"点面积:"<<pt.Area()<<endl;pt.Show();cout<<"cl1圆面积:"<<cl1.Area()<<endl;cl1.Show();cout<<"cl2圆面积:"<<cl2.Area()<<endl;cl2.Show();cl3=cl1;cout<<"cl3圆面积:"<<cl3.Area()<<endl;cl3.Show();cout<<"h1底面积:"<<h1.Area()<<endl;cout<<"h1侧面积:"<<h1.ceArea()<<endl;cout<<"h1全面积:"<<h1.quArea()<<endl;cout<<"h1体积:"<<h1.volume()<<endl;h1.Show();cout<<"h2底面积:"<<h2.Area()<<endl;cout<<"h2侧面积:"<<h2.ceArea()<<endl;cout<<"h2全面积:"<<h2.quArea()<<endl;cout<<"h2体积:"<<h2.volume()<<endl;h2.Show();h3=h1;cout<<"h3底面积:"<<h3.Area()<<endl;cout<<"h3侧面积:"<<h3.ceArea()<<endl;cout<<"h3全面积:"<<h3.quArea()<<endl;cout<<"h3体积:"<<h3.volume()<<endl;h3.Show();cout<<"线面积:"<<ln1. Area()<<'\t'<<"线长度:"<<ln1. GetLength()<<endl;ln1.Show();ln2.Show();return 0;}实验结论:通过这次实验,我对类的继承和派生,派生类构造函数初始化基类成员和对象成员的方法,以及赋值兼容原则有了更深的理解。

实验继承与派生

实验继承与派生

实验项目:继承与派生实验目的:1.学习定义和使用类的继承关系,定义派生类2.熟悉不同继承方式下对基类成员的访问控制实验任务:1.定义一个基类Animal,有私有整形成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗2.定义一个基类BaseClass,有整形成员变量Number,构造其派生类,观察其构造函数和析构函数的执行情况。

3.定义一个车类(vehicle)基类,有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。

自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(Seatnum)等属性。

,在继承和过程中,注意把vehicle设置为虚基类。

如果不把vehicle设置为虚基类,会有什么问题变成试试看。

实验步骤:1.编写程序定义Animal,成员变量age定义为私有的。

构造其派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现错误提示:程序名lab5_1.cpp2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。

程序名lab5_2.cpp3.用debug功能跟踪程序lab5_2.cpp的执行过程,观察基类和派生类的构造函数和析构函数的的执行过程。

4.编写程序定义车类(vehicle),由此派生出自行车(bicycle)类、汽车(motorcar),把vehicle设置为虚基类。

再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。

程序名lab5_3.cpp。

编译成功后把vehicle设置成非虚基类,在编译一次,此时系统报错,无法编译成功。

C++实验七继承和派生

C++实验七继承和派生

实验七继承和派生实验目的∙学习声明和使用类的继承关系,声明派生类。

∙熟悉不同继承方式下对基类成员的访问控制。

∙学习利用虚基类解决二义性问题。

∙理解继承中构造函数和析构函数的调用规则。

实验内容:一、程序分析题1阅读下面的程序,写出运行结果。

#include<iostream>using namespace std;class A{public:A(){a=0;cout<<"调用A的默认构造函数!\n";}A(int i){a=i;cout<<"调用A的带参数构造函数!\n";}~A(){cout<<"调用A的默认析构函数!\n";}void Print() const{cout<<a<<",";}int Geta(){return a;}private:int a;};class B:public A{public:B(){b=0;cout<<"调用B的默认构造函数!\n";}B(int i,int j,int k);~B(){cout<<"调用B的默认析构函数!\n";}void Print();private:int b;A aa;};B::B(int i,int j,int k):A(i),aa(j){b=k;cout<<"调用B的构造函数!\n";};void B::Print(){A::Print();cout<<b<<","<<aa.Geta()<<endl;int main(){B bb(1,2,5);bb.Print();return 0;}2阅读下面程序,写出运行结果。

C 程序设计实验报告 继承与派生

C 程序设计实验报告 继承与派生

《C++程序设计》实验报告Exercise7继承与派生1实验目的(1)学习定义和使用类的继承关系,定义派生类。

(2)熟悉不同继承方式下对基类成员的访问控制。

(3)学习利用虚基类解决二义性问题。

2实验要求(1)定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还回有问题吗?编程试之。

源程序代码:#include<iostream>using namespace std;class Animal{public:Animal(){age=0;cout<<"构造了Animal对象"<<endl;}~Animal(){cout<<"析构了Animal对象"<<endl;}void display(){cout<<"Its age is"<<age<<"years old"<<endl;}int age;};class Dog:public Animal{public:Dog(){cout<<"构造了Dog对象"<<endl;}~Dog(){cout<<"析构了Animal对象"<<endl;}int setAge(int n){age=n;return age;}};int main(){Dog mimi;mimi.setAge(3);mimi.display();return0;}运行结果:(2)定义一个基类BaseClass,有整型变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

实验七类的继承和派生

实验七类的继承和派生

实验七类的继承和派生一.实验目的与要求1.掌握类的继承与派生的实现方法。

2.熟悉单继承下派生类的构造函数和析构函数的设计。

3.掌握类成员的标识与访问方法。

4.熟悉类组合的设计方法和应用二. 实验任务1.已知交通工具类(vehicle)定义如下:class vehicle{protected:int wheels; // 车轮数public:vehicle(int wh=0);void init(int wh); //设置车轮数int get_wheels(); //返回车轮数void print(); //输出车轮数};要求:(1)实现vehicle类;(2)定义公有派生类:小车类(car)。

数据成员新增“载人数”;成员函数新增构造函数、init(设置车轮数和载人数),getpassenger(获取载人数),print (输出车轮数和载人数)。

2.已知点类(point)定义如下:class Point{private:double x,y;public:Point(double i=0,double j=0) ;double getx(); //返回x的值double gety(); //返回y的值};要求:(1)实现point类;(2)用组合的方法声明一个矩形类,数据成员包括矩形左上角和右下角两个点的坐标;成员函数包括构造函数、求矩形长、宽、周长以及面积的函数。

1、#include <iostream>#include <string>using namespace std;int wh,num;class vehicle{protected:int wheels;public:vehicle(){wheels=0;}vehicle(int wh){wheels=wh;}void init(int wh);int get_wheels();virtual void print();};void vehicle::init(int wh){wheels=wh;}int vehicle::get_wheels(){return(wheels);}void vehicle::print(){cout<<"车轮数为"<<wheels<<endl;}class car:public vehicle{protected:int number;public:car(){wheels=0;number=0;}car(int wh):vehicle(wh){wh=0;num=0;}car(int wh,int num):vehicle(wh){wheels=wh;number=num;} void init(int wh,int num);int getpassenger();virtual void print();};void car::init(int wh,int num){wheels=wh;number=num;}int car::getpassenger(){return(number);}void car::print(){cout<<"车轮数为"<<wheels<<endl;cout<<"载人数为"<<number<<endl; }int main(){int wh,num;vehicle vehicle1,vehicle2;vehicle1.get_wheels();vehicle1.print();cout<<"请输入车轮数"<<endl;cin>>wh;vehicle2.init(wh);vehicle2.get_wheels();vehicle *pt=&vehicle2;pt->print();car car1,car2;car1.getpassenger();car1.print();cout<<"请输入载人数"<<endl;cin>>num;car2.init(wh,num);car2.getpassenger();pt=&car2;pt->print();return 0;}2、#include <iostream>#include <cmath>using namespace std;class point{private:double x;double y;public:point(int i=0,int j=0);void Point(double i,double j);double getx();double gety();};point::point(double i,double j):x(i),y(j){}void point::Point(double i,double j){x=i;y=j;}double point::getx(){return(x);}double point::gety(){return(y);}class rectangular:public point{private:point p1;point p2;double length;double width;public:Rectangular(point p3,point p4):p1(p3),p2(p4){} double side();double perimeter();double area();};point rectangular::side(){double a,b,c,d;a=p1.getx();b=p2.getx();length=fabs(a-b);cout<<"length="<<length<<endl;c=p1.gety();d=p2.gety();width=fabs(c-d);cout<<"width="<<width<<endl;}double rectangular::perimeter(){return(2*(length+width));}double rectangular::area(){return(length*width);}int main(){int i,j,k,l,h,e;point p1,p2;cout<<"x="<<p1.getx()<<endl;cout<<"y="<<p1.gety()<<endl;cout<<"请输入矩形左下角和右上角两点坐标的横纵坐标值"<<endl;cin>>i>>j;p2.Point(i,j);cout<<"x="<<p2.getx()<<endl;cout<<"y="<<p2.gety()<<endl;rectangular rectangular1;rectangular(p1,p2);rectangular1.side();rectangular1.perimeter();cout<<"perimeter="<<rectangular1.perimeter()<<endl;rectangular1.area();cout<<"area="<<rectangular1.area()<<endl;return 0;}。

C语言程序设计课件第07章继承与派生

C语言程序设计课件第07章继承与派生

访
rect.InitR(2,3,20,10);

rect.Move(3,2); cout<<rect.GetX()<<','<<rect.GetY()<<','

<<rect.GetH()<<','<<rect.GetW();
制}
13
class Rectangle: private Point
{ public:
void Function(); };
void B::Function() { x=5;
cout<<x<<endl; } void C::Function() { x=15;
cout<<x<<endl; } void main() { B b;
b.Function(); C c; c.Function(); }
16
#include<iostream> using namespace std; class A { protected:
int x; }; class B: protected A { public:
void Function(); }; class C: private B { public:

float GetY() { return Point::GetY();} float GetH() {return H;}

float GetW() {return W;}
制 private:
float W,H;
};
14
类 #include<iostream> 成 using namespace std;

继承与派生实验报告

继承与派生实验报告

继承与派生实验报告继承与派生实验报告引言:继承与派生是面向对象编程中的重要概念,通过继承,一个类可以派生出子类,从而实现代码的复用和扩展。

本文将通过实验来探讨继承与派生的概念、原理和应用。

实验目的:1. 理解继承与派生的概念和原理;2. 掌握如何在编程语言中实现继承和派生;3. 熟悉继承与派生的应用场景。

实验步骤:1. 创建父类:首先,我们创建一个名为"Animal"的父类,该类具有属性和方法,例如"age"和"eat()"。

2. 创建子类:接下来,我们创建一个名为"Cat"的子类,该类继承自"Animal"类。

在子类中,我们可以重写父类的方法或添加新的方法。

3. 实例化对象:通过实例化父类和子类的对象,我们可以调用它们的方法和访问它们的属性。

4. 测试继承与派生:我们可以通过调用父类和子类的方法,观察它们的行为是否符合预期。

实验结果:在创建父类"Animal"时,我们定义了一个"age"属性和一个"eat()"方法。

在创建子类"Cat"时,我们继承了父类的属性和方法,并添加了一个新的"meow()"方法。

在实例化父类对象时,我们可以通过调用"eat()"方法来模拟动物进食的行为。

而在实例化子类对象时,我们既可以调用从父类继承而来的"eat()"方法,也可以调用子类特有的"meow()"方法来模拟猫咪的叫声。

通过实验,我们发现继承与派生的优势在于代码的复用和扩展。

我们只需在父类中定义一次通用的属性和方法,然后让不同的子类继承父类,即可实现代码的复用。

同时,子类还可以通过重写父类的方法或添加新的方法,实现代码的扩展和个性化。

讨论与应用:继承与派生不仅仅局限于上述的父类和子类关系,它还可以在多层次的继承结构中发挥作用。

c++实验报告 继承与派生

c++实验报告 继承与派生

昆明理工大学信息工程与自动化学院学生实验报告(201 —201 学年第二学期)课程名称:C++程序设计开课实验室:年月日实验目的1.学习定义和使用类的继承关系,定义派生类。

2.熟悉不同继承方式下对基类成员的访问控制。

3.学习利用虚基类解决二义性问题。

题目1:定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。

实验步骤:编写程序定义基类Animal,成员变量age定义为私有的。

构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:error C2248:’age’:cannot access private member declared in class’Animal’error C2248:’age’:cannot access private member declared in class’Animal’把age改为公有成员变量后重新编译就可以了。

程序名:lab7—1.cpp。

源程序1/****** lab7-1.cpp ******/#include <iostream.h>class Animal{//protected:int age;public:Animal(int a){ age=a;cout<<"我是基类构造函数,我创建基类对象age="<<age<<endl;}~Animal(){cout<<"我是基类析构函数,我释放基类对象age="<<age<<endl;}int getage() const{return age;}void setage(int a){age=a;}};class Dog:public Animal{int color;public:Dog(int a=10,int c=3):Animal(a),color(c){ //setage(a);cout<<"我是子类构造函数,我创建子类对象color="<<color<<" age="<<getage()<<endl;}~Dog(){cout<<"我是子类析构函数,我释放子类对象color="<<color<<endl;}};void main(){Dog a;}运行结果截图题目2:定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

实验七 继承与派生

实验七 继承与派生

实验七继承与派生【实验目的】1、掌握继承的概念。

2、理解派生类与基类的关系。

3、理解不同的继承类型。

4、掌握继承下的构造函数和析构函数。

5、掌握单继承和多继承使用方法。

6、理解静态成员。

【实验内容】1、上机分析下面程序,理解继承下构造函数和析构函数的执行顺序。

#include <iostream.h>class A{public:A(){cout<<"Constructor1_A"<< x << endl;}A( int m ) : x( m ){cout<<"Constructor2_A"<< x << endl;}~A(){cout<<"Destructor_A"<< x << endl;}private:int x;};class B : public A{public:B(){cout<<"Constructor1_B"<< y << endl;}B( int m, int n, int l ) : A( m ), a( n ), y( l ){cout<<"Constructor2_B"<< y <<endl;}~B(){cout<<"Destructor_B"<< y << endl;}private:A a;int y;};int main(){B b1, b2(5,6);return 0;}2、在下面一段类定义中,Derived类是有直接基类Base1和Base2所派生的,Derived 类包含有两个间接基类Base,在初始化函数Init中,需要把x1和x2的值分别赋给属于基类Base1的x成员和属于基类Base2的x成员。

C++语言程序设计实验7(继承和派生)

C++语言程序设计实验7(继承和派生)

{
return (m + n);
}
};
int main( )
{
Derived objD;
objD.SetXY(1, 2);
objD.SetAB(10, 20);
objD.SetMN(100, 200);
cout<<"M+N="<<objD.m + objD.n<<endl; //派生类对象可以直接访问公有数据
z 多继承时的构造函数(请参考"case07\7_8.cpp") 派生类名::派生类名(基类 1 的形参, 基类 2 的形参, ..., 基类 n 的形参, 本类的形参) :基类名 1(参数), 基类名 2(参数), ..., 基类名 n(参数) { 本类成员初始化赋值语句; };
z 多继承且有内嵌对象时的构造函数(请参考"case07\7_9.cpp", "7_10.cpp", "7_11.cpp") 派生类名::派生类名(基类 1 的形参, 基类 2 的形参, ..., 基类 n 的形参, 本类形参) :基类名 1(参数), 基类名 2(参数), ..., 基类名 n(参数), 对象数据成员的初始化 { 本类成员初始化赋值语句; };
//cout<<"X+Y="<<objD.x + objD.y<<endl; //派生类对象不能直接访问私有数据
cout<<"X+Y="<<objD.GetX( ) + objD.GetY( )<<endl;

C 继承与派生实验报告

C 继承与派生实验报告

C 继承与派生实验报告1. 引言继承与派生是面向对象编程中的基本概念之一,C语言作为一门面向过程的编程语言,也支持继承与派生的概念。

本实验旨在通过编写代码演示C语言中的继承与派生的使用方法,加深对这一概念的理解。

2. 继承与派生的概念继承是一种面向对象编程中的重要概念,通过继承,派生类可以继承基类的属性和方法。

在C语言中,继承是通过结构体嵌套的方式实现的。

派生是继承的一种特殊形式,通过派生,派生类可以在基类的基础上增加新的属性和方法。

3. 实验步骤步骤一:定义基类首先,我们需要定义一个基类,基类包含一些公共的属性和方法。

在C语言中,我们可以使用结构体来定义类。

typedef struct {int x;int y;} Point;上述代码定义了一个名为Point的结构体,它包含了两个整型属性x和y。

这个结构体可以看作是基类。

步骤二:定义派生类接下来,我们可以定义派生类,派生类通过嵌套包含基类的结构体来实现继承。

typedef struct {Point base; // 基类结构体int z; // 派生类自己的属性} Point3D;上述代码定义了一个名为Point3D的结构体,它嵌套包含了基类Point的结构体,并新增了一个整型属性z。

这个结构体可以看作是派生类。

步骤三:使用派生类在定义好派生类后,我们可以使用派生类来创建对象,并调用基类的属性和方法。

int main() {// 创建对象Point3D point3d;point3d.base.x = 1;point3d.base.y = 2;point3d.z = 3;// 调用基类属性printf("x: %d\n", point3d.base.x);printf("y: %d\n", point3d.base.y);// 调用派生类自己的属性printf("z: %d\n", point3d.z);return0;}上述代码示例了如何使用派生类创建对象,并访问基类的属性和派生类自己的属性。

[C++]继承和派生实验报告

[C++]继承和派生实验报告

运行结果:修改过后的程序代码如下:#include <iostream>#include <cstring>using namespace std;class Person{private: char m_strName[20];int m_nAge;int m_nSex;public: Person();//构造函数Person( char *name, int age, char sex ); //构造函数Person( const Person &p ); //拷贝构造函数~Person() //析构函数{cout<<"Now destroying the instance of Person"<<endl;}void SetName( char *name );void SetAge( int age );void setSex( char sex );char* GetName();运行结果:2. 程序的类结构图为:A-x:int+A()+A( int m ) : x( m )+~A()B-A a-y:int+B()+B( int m, int n, int l ) : A( m ), a( n ),y( l )+~B()运行结果:3.程序的类结构图为:Person#m_name[20]:char#m_age:int#m_sex:char+Person()+information(char* name,int age,char sex):void+~Person()Teacher#major[20]: char#position[20]: char#course[20]: char+m_major(char* m): void+m_position(char* p):void+m_course(char* c): voidcout<<'['<<x_size<<","<<y_size<<']'<<", "<<'['<<i_size<<","<<j_size<<']'; }int main(){Circle1 circle(0.0,0.0,3.0);circle.area();circle.perimeter();circle.print();cout<<"\n";Square1 square(0.0,0.0,3.0,3.0);square.area();square.perimeter();square.print();cout<<"\n";cout<<"圆的面积为:"<<circle.area()<<endl;cout<<"圆的周长为:"<<circle.perimeter()<<endl;cout<<"圆的圆心坐标和半径为:";circle.print();cout<<"\n\n";cout<<"正方形的面积为:"<<square.area()<<endl;cout<<"正方形的周长为:"<<square.perimeter()<<endl;cout<<"正方形的中心坐标和一个顶点坐标分别为:";square.print();cout<<"\n";return 0;}运行结果:。

C++实验报告--继承和派生

C++实验报告--继承和派生
cout<<"Teacher constructing...."<<endl;
}
void show(){
Person::show();
cout<<"Teacher lesson:"<<lesson<<endl;
}
};
class Student:virtual public Person{
private:
{
cout<<"constructing...."<<endl;
}
void show(){
cout<<"YJSZJ:"<<endl;
Teacher::show();
Student::show();
}
};
void main(){
YJSZJ x(21,50,98.0,99.0,97.0,5000,02);
}
void show_biaomianji()
{
cout<<"表面积:"<< "2*(A*B+A*H+B*H)= "<<2*(A*B+A*H+B*H)<<" (cm2)"<<endl;;
}
};
void main(){
Point C(6,8),D(3,4);
C.showXY();
D.showXY();
int H;
public:
Cuboid(int H,int A,int B,int X,int Y):Rectangle(A,B,X,Y)

C 继承与派生实验报告

C  继承与派生实验报告

C 继承与派生实验报告C 继承与派生实验报告引言:在计算机编程领域,继承与派生是一种重要的概念。

通过继承,我们可以构建更加复杂和灵活的程序结构,提高代码的可重用性和可维护性。

本实验旨在通过实际操作和分析,深入理解C语言中继承与派生的原理和应用。

实验目的:1. 理解继承与派生的概念和原理;2. 掌握C语言中继承与派生的语法和用法;3. 实践继承与派生的应用,加深对其理解。

实验步骤:1. 创建基类和派生类:首先,我们创建一个基类Animal,其中包含一个成员函数eat()和一个成员变量name。

然后,我们创建一个派生类Dog,继承自基类Animal,并添加一个成员函数bark()和一个成员变量breed。

2. 实现继承与派生的功能:在基类Animal中,实现成员函数eat(),用于输出动物的进食行为。

在派生类Dog中,实现成员函数bark(),用于输出狗的吠叫行为。

同时,通过继承,派生类Dog可以直接访问基类Animal中的成员变量name。

3. 测试继承与派生的效果:在主函数中,创建一个Dog对象,并调用其成员函数eat()和bark(),以验证继承与派生的功能是否正常工作。

同时,可以通过修改派生类Dog的成员变量breed,观察其对程序运行结果的影响。

实验结果与分析:通过实验,我们可以发现继承与派生的强大功能。

基类Animal提供了一种通用的行为eat(),而派生类Dog则通过添加成员函数bark(),实现了更加具体和特定的行为。

这种继承与派生的关系,使得我们可以在保留原有功能的基础上,进行灵活的扩展和定制。

此外,通过继承,派生类Dog可以直接访问基类Animal中的成员变量name。

这种继承的特性,使得派生类可以共享基类的数据,避免了重复定义和冗余代码的问题。

同时,通过修改派生类Dog的成员变量breed,我们可以看到其对程序运行结果的影响。

这种灵活性,使得我们可以根据具体需求,定制不同的派生类,实现更加个性化的功能。

继承与派生

继承与派生

实验4 继承与派生班级学号(最后两位)姓名成绩一、实验目的1.熟练掌握类的继承,能够定义和使用类的继承关系2.掌握派生类的声明与实现方法3.掌握类构造函数的初始化列表与作用域分辨率的使用方法4.理解虚基类在解决二义性问题中的作用.二、实验内容1.定义一个基类有姓名、性别、年龄,再由基类派生出教师类和学生类,教师类增加工号、职称和工资,学生类增加学号、班级、专业和入学成绩。

2.声明一个哺乳动物Mammal类,再由此派生出狗Dog类,声明一个Dog类的对象,观察基类与派生类的构造函数与析构函数的调用顺序。

3.定义一个Point类,派生出矩形类Rectangle和圆类Circle,计算各派生类对象的面积Area()。

4.设计一个圆类circle和一个桌子类table,另设计一个圆桌类roundtable,它是从前两个类派生的,要求输出一个圆桌的高度、面积和颜色等数据。

5.定义一个大学生类student,函数私有数据成员:姓名、学号、校名,并为它定义带参数的构造函数,参数带缺省值的构造函数和输出数据成员值的print()公有成员函数,另定义研究生类,它以公有继承方式派生于类student,新增加“研究方向、导师名”两个私有数据成员,并定义带参数的构造函数和输出研究生数据的print()公有成员函数。

在main()函数中定义基类和派生类对象,对类进行测试。

三、实验源程序、测试与结论1.#include<iostream>#include<string>using namespace std;class person{public:person(string name_,char sex_,int age_):name(name_),sex(sex_),age(age_){}void show(){cout<<"name: "<<name<<endl;cout<<"sex: "<<sex<<endl;cout<<"age: "<<age<<endl;}protected:string name;char sex;int age;};class teacher:public person{public:teacher(string name_,char sex_,int age_,int j_n,string job_,int wage_):person(name_,sex_,age_),job_number(j_n),job(job_),wage(wage_){}void show1();private:int job_number;string job;int wage;};void teacher::show1(){cout<<"This teacher is: "<<endl;show();cout<<"job number: "<<job_number<<endl;cout<<"job: "<<job<<endl;cout<<"wage: "<<wage<<endl;}class student:public person{public:student(string name_, char sex_, int age_, int num_, string cla_, string major_, int score_): person(name_,sex_,age_), num(num_), cla(cla_), major(major_), score(score_){}void show2();private:int num;string cla;string major;int score;};void student::show2(){cout<<"This student is: "<<endl;show();cout<<"NO: "<<num<<endl;cout<<"class: "<<cla<<endl;cout<<"major: "<<major<<endl;cout<<"score: "<<score<<endl;}void main(){teacher t("John",'M',28,11111,"math",5000);t.show1();student s("Randy",'M',20,1210034,"BX1205","electron",100);s.show2();}2.#include<iostream>using namespace std;class Mammal{public:Mammal(){cout<<"Constructor Mammal"<<endl;}~Mammal(){cout<<"Mammal will die"<<endl;}};class Dog:public Mammal{public:Dog():Mammal(){cout<<"Constructor Dog"<<endl;}~Dog(){cout<<"Dog will die"<<endl;}};void main(){Dog dog;}3.#include<iostream>#include<math.h>using namespace std;#define PI 3.14class Point{public:Point(float x_=0, float y_=0):x(x_),y(y_){} protected:float x;float y;};class Rectangle:public Point{public:Rectangle(float x_, float y_):Point(x_,y_){}void Area();};void Rectangle::Area(){float area;area=x*y;cout<<"矩形的面积为: "<<area<<endl; }class Circle:public Point{public:Circle(float r_):Point(),r(r_){}void Area();private:float r;};void Circle::Area(){float area;area=PI*r*r;cout<<"圆的面积为: "<<area<<endl; }void main(){float l,w,r;cout<<"请输入长方形的长和宽: ";cin>>l>>w;cout<<"请输入圆的半径: ";cin>>r;Rectangle rectangle(l,w);rectangle.Area();Circle circle(r);circle.Area();}4.#include<iostream>using namespace std;#include<string>#define PI 3.14class circle{public:circle(float r_=0):r(r_){}void Area(){float area;area=PI*r*r;cout<<"圆的面积为: "<<area<<endl;}protected:float r;};class table{public:table(float h_, string color_):h(h_),color(color_){}void show(){cout<<"桌子的高度: "<<h<<'\n'<<"桌子颜色: "<<color<<'\n';}protected:float h;string color;};class roundtable:public circle,public table{public:roundtable(float r_, float h_, string color_):circle(r_),table(h_,color_) {cout<<"这是一个圆桌,它具体属性有: "<<endl;}};void main(){float r, h;string color;cout<<"请输入圆的半径: ";cin>>r;cout<<"请输入桌子的高度和颜色: ";cin>>h>>color;roundtable t(r,h,color);t.show();t.Area();}5.#include<iostream>using namespace std;#include<string>class student{private:string name, school;int no;public:student(string name_,int no_,string school_):name(name_),no(no_),school(school_){} student(){name="John";no=121003400;school="Shanghai University";}void print(){cout<<"大学生的信息如下: "<<endl;cout<<"姓名: "<<name<<endl;cout<<"学号: "<<no<<endl;cout<<"校名: "<<school<<endl;}};class graduate:public student{private:string direction,teacher;public:graduate(string name_,int no_,string school_,string direction_,string teacher_):student(name_,no_,school_),direction(direction_),teacher(teacher_){}void print(){cout<<"研究生的信息如下: "<<endl;cout<<"研究方向: "<<direction<<endl;cout<<"导师: "<<teacher<<endl;}};void main(){student s1;s1.print();student s2("Ranen", 121003411, "SDJU");s2.print();graduate s3("Cachy",121003422, "SDJU","Math","Tom");s3.student::print();s3.print();}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子信息学院实验报告书课程名:面向对象程序设计题目:实验7 继承与派生实验类别设计班级:BX1004学号:35姓名:赵鑫一.实验目的1.理解继承的含义,掌握派生类的定义方法和实现;2.理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员;3.理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;4.理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。

二.实验内容1.将例5.2的程序片段补充和改写成一个完整、正确的程序,用私有继承方式。

在程序中应包括输入数据的函数,在程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。

2.编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。

要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher的基类。

3. 编写一个程序计算出球、圆柱和圆锥的表面积和体积。

要求:(1)定义一个基类圆,至少含有一个数据成员半径;(2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数。

(3)定义主函数,求球、圆柱、圆锥的和体积(初始化用构造函数)。

3.实验结果⑴ #include<iostream>using namespace std;class Student{public:void get_value(){cin>>num>>name>>sex;}void display(){cout<<"学号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;}private:char num[20];char name[10];char sex[10];};class Student1:private Student{public:void get_value_1(){get_value();cin>>age>>addr;}void display_1(){display();cout<<"年龄:"<<age<<endl;cout<<"住址:"<<addr<<endl;}private:int age;char addr[30];};int main(){cout<<"请输入学生学号姓名性别年龄住址:"<<endl;Student1 stud1;stud1.get_value_1();cout<<"*******************************************"<<endl;cout<<endl;stud1.display_1();cout<<endl;cout<<"*******************************************"<<endl;cout<<"\t\t欢迎再次使用!"<<endl;cout<<"\t\t喜迎“十八大”"<<endl;return 0;}运行结果:⑵ #include<iostream>#include<string>using namespace std;class Student{public:Student(int a,string nam,string ban,string sco){number=a;name=nam;banji=ban;score=sco;}void display(){cout<<"编号:"<<number<<endl;cout<<"姓名:"<<name<<endl;cout<<"班级:"<<banji<<endl;cout<<"成绩:"<<score<<endl;}protected:int number;string name;string banji;string score;};class Teacher{public:Teacher(int n,string nam,string tit,string dep){number=n;name=nam;title=tit;department=dep;}void display1(){cout<<"编号:"<<number<<endl;cout<<"姓名:"<<name<<endl;cout<<"职称:"<<title<<endl;cout<<"部门:"<<department<<endl;}protected:int number;string name;string title;string department;};class Person:public Student,public Teacher{public:Person(int a,string nam,string ban,string sco,int n,string nam1,string tit,stringdep):Student(a,nam,ban,sco),Teacher(n,nam1,tit,dep){}void show(){cout<<"人类学生编号:"<<Student::number<<endl;cout<<"人类学生姓名:"<<Student::name<<endl;cout<<"人类学生班级:"<<Student::banji<<endl;cout<<"人类学生成绩:"<<Student::score<<endl;cout<<endl;}void show1(){cout<<"人类教师标号:"<<Teacher::number<<endl;cout<<"人类教师姓名:"<<Teacher::name<<endl;cout<<"人类教师职称:"<<Teacher::title<<endl;cout<<"人类教师部门:"<<Teacher::department<<endl;cout<<endl;}};int main(){Person Per(1,"赵鑫","BX1004","100",2,"夏建国","校长","行政"); Per.show1();Per.show();return 0;}运行结果:(3)#include<iostream>using namespace std;#define pi 3.14159class banjing(int bj,int h);{public:banjing(int bj){R=bj;}void display();protected:int R;};class qiu:public banjing{public:qiu(int R):banjing(R){R1=R;s1=4*pi*R1*R1;v1=4/3*pi*R1*R1*R1;}void show(){cout<<"球的表面积为:"<<s1<<endl;cout<<"球的体积为:"<<v1<<endl;cout<<endl;}protected:int R1;float s1;float v1;};class yuanzhu:public banjing{public:yuanzhu(int R,int h):banjing(R,h){h2=h;R2=R;s2=pi*R2*R2+4*pi*R2*h2;v2=pi*R2*R2*h2;}void show(){cout<<"圆柱的表面积为:"<<s2<<endl;cout<<"圆柱的体积为:"<<v2<<endl;cout<<endl;}protected:int R2;int h2;float s2;float v2;};class yuanzhui:public banjing{public:yuanzhui(int R,int h):banjing(R,h){h3=h;R3=R;s3=pi*R3*R3+38.0;v3=1/3*pi*R3*R3*h3;}void show(){cout<<"圆锥的表面积为:"<<s3<<endl;cout<<"圆锥的体积为:"<<v3<<endl;cout<<endl;}protected:int R3;int h3;float s3;float v3;};int main(){banjing ban(2,3);ban.show();return 0;}运行结果:4.结果分析与实验体会本次实验,我进一步熟悉和掌握了《继承和派生》的相关知识。

相关文档
最新文档