继承与派生实验报告

合集下载

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来创建具体的按钮和文本框。

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

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

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

继承与派生实验报告

继承与派生实验报告

西安财经学院信息学院《面向对象方法及程序设计》 实验报告实验名称 继承与派生 实验室 519 实验日期 12.23继承与派生一、实验目的与要求1. 进一步巩固C++语言中类和对象的概念和应用。

2. 掌握继承和派生的概念和实现。

3. 进一步熟练掌握类和对象的概念,使用的方法,访问的规则。

4. 掌握单继承的概念和应用。

5. 掌握多继承和虚基类的概念,并熟练应用。

二、实验内容1.根据如图所示编辑程序,计算教师的课时,计算学生的平均成绩,假定每个学生3门课程,并输出每个类的信息(例如教师的职称,学生的专业等,程序实现要求使用到虚基类的知识)。

2. 编写一个程序实现员工的工资管理。

该公司主要有4类人员,经理(manager ),销售经理(salesmanager),技术人员(technician),销售员(salesman)。

这些人员都是职员(employee ),有编号,姓名,月工资,工龄等信息。

月工资的计算方法为:经理固定月薪8000元,技术人员每小时工资100元,销售人员底薪为1000,然后加上每月的销售额的4%,销售经理底薪5000,然后加上本部门当月销售总额的千分之五。

要求编写程序计算该公司职员的月工资并输出到屏幕上。

(假定该公司1个经理,1个销售经理,3个技术人员,3个销售人员)三、实验环境 硬件环境:PC 一台姓名 学号 班级 年级 指导教师 李翠软件环境:WIN7操作系统、Microsoft visual c++ 2010 四、实验步骤五、实验结果六、小结通过本次实验,使我对继承与派生有了更深入的了解。

包括,虚基类以及虚基类与派生类的构造函数与析构函数的调用等等。

七、源程序清单内容1:#include"iostream"using namespace std;class person{};class teacher:virtual public person{public:int b;};class teacher1:virtual public teacher{public:teacher1(int B){b=B;cout<<"教授"<<endl;cout<<"课时:"<<b<<endl;}};class teacher2:virtual public teacher{public:teacher2(int D){b=D;cout<<"讲师"<<endl;cout<<"课时:"<<b<<endl;}};class teacher3:virtual public teacher{public:teacher3(int F){b=F;cout<<"研究生助教"<<endl;cout<<"课时:"<<b<<endl;}};class student:public person{public:float a1,a2,a3;};class student1:public student{public:student1(float b1,float b2,float b3){a1=b1;a2=b2;a3=b3;cout<<"英语:"<<a1<<endl;cout<<"数据库:"<<a2<<endl;cout<<"java:"<<a3<<endl;}};class student2:public student{public:student2(float b1,float b2,float b3){a1=b1;a2=b2;a3=b3;cout<<"本科生:"<<endl;cout<<"英语:"<<a1<<endl;cout<<"组成原理:"<<a2<<endl;cout<<"c++:"<<a3<<endl;}};class student3:public student{public:student3(float b1,float b2,float b3){a1=b1;a2=b2;a3=b3;cout<<"专科生:"<<endl;cout<<"英语:"<<a1<<endl;cout<<"c语言:"<<a2<<endl;cout<<"数字电路:"<<a3<<endl;}};class zhuyan:public teacher3,public student1{public:zhuyan(int x,float a,float b,float c):teacher3(x),student1(a,b,c) {}};int main(){teacher1 q(50);teacher2 w(70);student2 e(75,82,100);student3 r(78,79,87);zhuyan t(80,70,78,81);system("pause");return 0;}内容2:#include <iostream>using namespace std;class employee{public:employee(){cout<<"编号:";cin>>number;cout<<"姓名:";cin>>name;salary=0;}protected:char number[5];char name[10];double salary;};class manager:public employee{public:manager(){monthlypay=8000;salary=monthlypay;}void print(){cout<<"经理:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} protected:int monthlypay;};class technician:public employee{public:technician(){weekpay=100;}void pay(){cout<<name<<"工作时间:";cin>>workhour;salary=workhour*100;}void print(){cout<<"技术人员:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} protected:int weekpay;int workhour;};class salesman:public employee{public:salesman(){basicsalary=1000;commrate=0.04;}void pay(){cout<<name<<"本月销售额:";cin>>sales;salary=basicsalary+sales* commrate;}void print(){cout<<"销售员:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} protected:int basicsalary;double commrate;double sales;};class salesmanager:public salesman{public:salesmanager(){monthlypay=5000;commrate=0.005;}void pay(){cout<<name<<"本月部门销售额:";cin>>sales;salary=monthlypay+sales* commrate;}void print(){cout<<"销售经理:"<<name<<"编号:"<<number<<"本月工资:"<<salary<<endl;} private:double monthlypay;};int main(){manager obj1;obj1.print();technician obj2,obj3,obj4;obj2.pay(); obj2.print();obj3.pay(); obj3.print();obj4.pay(); obj4.print();salesman obj5,obj6,obj7;obj5.pay(); obj5.print();obj6.pay(); obj6.print();obj7.pay(); obj7.print();salesmanager obj8;obj8.pay(); obj8.print();system("pause"); }。

c派生类与继承实验报告

c派生类与继承实验报告

实验2 派生类与继承实验课程名:面向对象程序设计(C++)专业班级:学号::实验时间:实验地点:指导教师:二、实验内容一、构造一个类Geometry 及其派生类,该类主要实现关于几何图形的基本操作。

对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。

试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。

实验代码如下:#include<iostream>using namespace std;class Geometry{public:CircleradiumsCircle()~Circle() BallBall()~Ball() GeometryGeometry()~Geometry()GetArea()GetPerimeter()Getcolume()show()Column Column()~Column()Rectangle Rectangle() ~Rectangle()Column column(1,2,3);column.show();return 0;}运行结果:代码分析:1)首先定义基类Geometry,在定义基类的派生类Circle,Rectangle再定义以Circle,Rectangle为基类的派生类Column,以及以Circle为基类的派生类Ball;2)在定义派生类时用构造函数初始化私有成员;3)最后用类的对象来调用类函数;二、设计如下类:(1)建立一个Point类,表示平面中的一个点;建立一个Line类,表示平面中的一条线端,内含两个Point类的对象;建立Triangle类,表示一个三角形,内含三个Line类的对象构成一个三角形。

(2)设计三个类的相应的构造函数、复制构造函数,完成初始化和对象复制(3)设计Triangle类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。

继承和派生实验报告

继承和派生实验报告

实验目的与要求: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. 掌握不同继承方式(公有继承、私有继承、保护继承)下的基类成员在派生类中的访问权限。

3. 熟悉构造函数和析构函数在继承过程中的调用顺序和时机。

4. 培养动手实践能力,提高编程水平。

二、实验内容1. 创建一个基类`Base`,包含三个成员变量:`int`类型的`a`,`float`类型的`b`和`char`类型的`c`。

2. 创建三个派生类`DerivedPublic`,`DerivedPrivate`和`DerivedProtected`,分别采用公有继承、私有继承和保护继承的方式继承自基类`Base`。

3. 在每个派生类中添加一个构造函数,用于初始化基类成员和派生类特有的成员变量。

4. 在每个派生类中添加一个成员函数`display`,用于打印基类成员和派生类成员变量的值。

5. 在主函数中创建基类对象和派生类对象,并调用`display`函数打印成员变量的值。

三、实验步骤1. 创建基类`Base`,包含三个成员变量和相应的构造函数。

```cppclass Base {public:int a;float b;char c;Base(int a, float b, char c) : a(a), b(b), c(c) {}};```2. 创建三个派生类,分别采用公有继承、私有继承和保护继承的方式继承自基类`Base`。

```cppclass DerivedPublic : public Base {public:int d;DerivedPublic(int a, float b, char c, int d) : Base(a, b, c), d(d) {}void display() {cout << "DerivedPublic: a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << endl;}};class DerivedPrivate : private Base {public:int d;DerivedPrivate(int a, float b, char c, int d) : Base(a, b, c), d(d) {}void display() {cout << "DerivedPrivate: a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << endl;}};class DerivedProtected : protected Base {public:int d;DerivedProtected(int a, float b, char c, int d) : Base(a, b, c), d(d) {}void display() {cout << "DerivedProtected: a = " << a << ", b = " << b << ", c = " << c << ", d = " << d << endl;}};```3. 在主函数中创建基类对象和派生类对象,并调用`display`函数打印成员变量的值。

(C++)实验报告六:继承与派生

(C++)实验报告六:继承与派生

实验6 继承与派生一、实验目的1.理解继承与派生、单继承与多继承的概念;2.理解基类与派生类的定义及使用方法,派生类对象的定义与初始化方法;3.理解继承与派生过程中,把派生类作为基类构成类族的概念及虚基类的概念。

二、实验环境一台PC机,Windows XP操作系统,Visual C++ 6.0开发环境。

三、实验内容1、由在校人员类(Person)作为基类派生出学生类(Student):实验步骤:#include <iostream>#include <string>using namespace std;class Person{public:Person(int i,char *n, char s, int a){ID=i;name=n;sex=s;age=a;};int getID(){return ID;}void show(){cout<<"ID: "<<ID<<endl;cout<<"name : "<<name<<endl;cout<<"sex: "<<sex<<endl;cout<<"age: "<<age<<endl;}private:int ID;string name;char sex;int age;};class Student:public Person{public:Student(int i,char *n,char s,int a,float m,float p,float e,float c):Person(i,n,s,a){math=m;physical=p;english=e;cpp=c;total=math+physical+english+cpp;}void show(){Person::show();cout<<"math: "<<math<<endl;cout<<"physical: "<<physical<<endl;cout<<"english: "<<english<<endl;cout<<"C++: "<<cpp<<endl;cout<<"total: "<<total<<endl;}private:float math,physical,english,cpp,total;};void main(){Person p1(1,"张帅",'M',22);p1.show();cout<<endl;Student s1(9901,"林维",'S',21,65,70,75,88);s1.show();}实验结果:2、由学生类、课程类作为基类,共同派生出选课类。

实验三 继承与派生

实验三 继承与派生

信息科学与工程学院《C++实验报告》班级:学号:姓名:教师:程磊二○一三年十一月实验三继承与派生一、实验目的1.学习声明和使用类的继承关系,声明派生类。

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

一、实验内容1.声明一个基类Shape,在此基础上派生出Rectangle和Circle类,二者都具有GetArea()函数以计算对象的面积;使用Rectangle类再创建一个派生类Square。

实现并测试这些类。

2.声明一个object类,有数据成员weight及相应的操作函数,由此派生出box类,增加数据成员height和width及相应的操作函数,声明一个box对象,实现并测试这些类,同时观察构造函数和析构函数的调用顺序。

二、实验注意事项程序中,需要编写一个可执行函数与main主调函数,自主设计输入、输出值,使得结果可以由控制台显示输出。

三、实验程序代码程序一:#include <iostream>using namespace std;const float pi=3.14159;class shape {public:void Choose();};void shape::Choose(){cout<<"基类shape被调用!"<<endl<<endl;}class Rectangle: public shape {private:float l,w;public:Rectangle(float a,float b){l=a;w=b;}float GetArea(){return l*w;};};class Circle:public shape{private:float radius;public:Circle(float r){radius=r;}float GetArea(){return radius*radius*pi;};};class Square:public Rectangle{private:float z;public:Square(float c):Rectangle(c, c){z=c;}void print(){cout<<"派生类Square被调用!"<<endl<<endl;}; };void main(){ Rectangle MyRectangle(2,3);cout<<MyRectangle.GetArea()<<endl;MyRectangle.Choose();Circle MyCircle(4);cout<<MyCircle.GetArea()<<endl;MyCircle.Choose();Square MySquare(5);cout<<MySquare.GetArea()<<endl;MySquare.print();MySquare.Choose();}程序二:#include <iostream>using namespace std;class object{private:int weight;public:void print();};void object::print(){weight=1;cout<<"基类object中的print函数被调用"<<endl<<"weight="<<weight<<endl<<endl; }class box:public object{private:int height,width;public:box(){height=2;width=3;cout<<"构造函数box被调用!"<<endl;cout<<"height="<<height<<endl<<"width="<<width<<endl<<endl;}~box(){cout<<"析构函数~box被调用!"<<endl;cout<<"height="<<height<<endl<<"width="<<width<<endl<<endl;}};int main(){box Mybox;Mybox.print();return 0;}四、实验结果程序一:程序二:六、实验小结通过实验一我了解到了了如何声明和使用类的继承关系,声明派生类。

实验五 继承与派生实验报告

实验五 继承与派生实验报告

实验五继承与派生一、实验目的( 1 )熟练掌握类的继承,能够定义和使用类的继承关系。

( 2 )掌握派生类的声明与实现方法。

( 3 )掌握类构造函数的初始化列表与作用域分辨符的使用方法。

二、实验工具与准备工作在开始实验前,应回顾或复习相关内容。

需要一台主算机,其中安装有VisualC + + 6 .0 、VisualC + + 2005 、VisualC + + 2005 ExpreSS 、Dev 一C + +或MinGW Developer Studio 等集成开发环境软件。

三、实验内容完成设计性实验项目8.7 创建一个表示雇员信息的employee类,其中包含数据成员name、empNo和salary,分别表示雇员的姓名、编号和月薪。

再从employee类派生出3个类worker、technician和salesman,分别代表普通工人、科研人员、销售人员。

三个类中分别包含数据成员productNum、workHours和monthlysales,分别代表工人每月生产产品的数量、科研人员每月工作的时数和销售人员每月的销售额。

要求各类中都包含成员函数pay,用来计算雇员的月薪,并假定:普通工人的月薪=每月生产的产品数×每件产品的赢利×20%科研人员的月薪=每月的工作时数×每小时工作的酬金销售人员的月薪=月销售额×销售额提成。

#include<iostream>using namespace std;class employee{protected:char name[20];int empNo;float salary;public:employee(char *cp="李强",int no=1001);employee(employee&);void setname(char *cp);void setempNo(int no);void setsalary(float sa);char*getname();int getempNo();float getsalary();void display();employee compsalary(employee *emp);};employee::employee(char *cp,int no){int i=0;while(*cp){name[i]=*cp;i++;cp++;}name[i]='\0';empNo=no;}employee::employee(employee &em) {int i=0;while([i]){name[i]=[i];i++;}name[i]='\0';empNo=em.empNo;salary=em.salary;}void employee::setname(char *cp) {int i=0;while(*cp){name[i]=*cp;i++;cp++;}name[i]='\0';}void employee::setempNo(int no) {empNo=no;}void employee::setsalary(float sa) {salary=sa;}char*employee::getname(){return name;}int employee::getempNo(){return empNo;}float employee::getsalary(){return salary;}void employee::display(){cout<<"工号为"<<empNo<<"的雇员"<<name<<"的月薪为"<<salary<<endl; }employee employee::compsalary(employee *emp){if(this->salary>=emp->salary)return *this;elsereturn *emp;}class worker : public employee{public:worker(char*,int,int);void setproductNum(int n){ productNum=n;}int getproductNum(){ return productNum;}void pay();private:int productNum;static float proper; //每件产品的利润};float worker::proper=30; //假设每件产品的利润为30元worker::worker(char *name,int no,int pronum):employee(name,no){productNum=pronum;}void worker::pay(){salary=productNum*proper*0.2;}class technician : public employee{public:technician(char*,int,float);void sethours(float h){ workHours=h;}float gethours(){ return workHours;}void pay();private:float workHours;static float payperhour; //科研人员每小时工作的酬金};float technician::payperhour=50; //假设科研人员每小时工作的酬金为50元technician::technician(char *name,int no,float hours):employee(name,no){workHours=hours;}void technician::pay(){salary=workHours*payperhour;}class salesman : public employee{public:salesman(char*,int,float);void setmonthlysales(int num){ monthlysales=num;}int getmonthlysales(){ return monthlysales;}void pay();private:float monthlysales;static float percent; //销售人员的销售提成};float salesman::percent=0.6; //假设销售人员的销售提成为60% salesman::salesman(char *name,int n,float sn):employee(name,n){monthlysales=sn;}void salesman::pay(){salary=monthlysales*percent;}void main(){worker w1("王某",1001,1000);technician t1("李某",1002,200);salesman s1("许某",1003,10000);w1.pay();t1.pay();s1.pay();cout<<"工人"<<w1.getname()<<"的月薪为"<<w1.getsalary()<<"元\n";cout<<"科研人员"<<t1.getname()<<"的月薪为"<<t1.getsalary()<<"元\n";cout<<"销售人员"<<s1.getname()<<"的月薪为"<<s1.getsalary()<<"元\n";}8.8 创建一个automobile类表示汽车,其中包含数据成员brand和speed,分别表示汽车的品拍和行驶速度;成员函数run和stop表示行驶和停止。

继承与派生实验报告

继承与派生实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

C实验报告-实验4继承与派生

C实验报告-实验4继承与派生

实验4 继承与派生一、实验目的和要求(1)掌握派生类的定义方法和派生类构造函数的定义方法。

(2)掌握不同继承方式的情况下,基类成员在派生类中的访问权限。

(3)掌握在多继承方式的情况下,构造函数与析构函数的调用时机与顺序。

二、实验内容和原理(1)实验指导书P86 1~2任选一题。

(2)实验指导书P89 3~4任选一题。

三、实验环境联想计算机,Windows XP操作系统,Visual C++ 6.0四、算法描述及实验步骤(1)输入源程序。

(2)检查程序有无错误(包括语法错误和逻辑错误),有则改之。

(3)编译和连接,仔细分析编译信息,如有错误应找出原因并改正之。

(4)运行程序,分析结果,在原有程序得出正确结果后,修改程序,将其改写为在类模板外定义,再按第(3)步骤运行。

(5)将调试好的程序保存在自己的用户目录中,文件名自定。

五、调试过程(1)2(2)4六、实验结果(1)2(2)4七、总结(1)掌握构造函数和析构函数的定义方法(2)构造函数调用顺序:先调用所有基类的构造函数,然后调用派生类的构造函数;(3)析构函数调用顺序:先调用派生类的析构函数,然后调用基类的析构函数,其顺序正好与构造函数调用顺序相反。

八、附录:(1)代码如下#include<iostream>using namespace std;class Base1{public:Base1(){cout<<"constructing Base1"<<endl;}~Base1(){cout<<"destructing Base1"<<endl;}};class Base2{public:Base2(){cout<<"constructing Base2"<<endl;}~Base2(){cout<<"destructing Base2"<<endl;}};class Derived1:public Base1,virtual public Base2{public:Derived1(){cout<<"constructing Derived1"<<endl;}~Derived1(){cout<<"destructing Derived1"<<endl;}};class Derived2:public Base1,virtual public Base2{public:Derived2(){cout<<"constructing Derived2"<<endl;}~Derived2(){cout<<"destructing Derived2"<<endl;}};class Derived3:public Derived1,virtual public Derived2 {public:Derived3(){cout<<"constructing Derived3"<<endl;}~Derived3(){cout<<"destructing Derived3"<<endl;}};int main(){Derived3 obj;return 0;}(2)4代码如下#include<iostream>using namespace std;const double PI=3.14;class Shape{public:double area()const{return 0.0;}void display(){};};class TwoDimShape:virtual public Shape{};class ThreeDimShape:virtual public Shape{};class Circle:public TwoDimShape{public:Circle(double myr){R=myr;}double area()const{return PI*R*R;}void display(){cout<<"Area of circle is ";}private:double R;};class Rectangle:public TwoDimShape{public:Rectangle(double myl,double myw){L=myl;W=myw;}double area()const{return L*W;}void display(){cout<<"Area of rectangle is";}。

C++程序实验报告

C++程序实验报告

C++程序实验报告实验五继承与派生实验目的1.学习定义和使用类的继承关系,定义派生类2.熟悉不同继承方式下对基类成员的访问控制3.学习利用虚基类解决二义性问题实验要求1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程尝试。

2.定义一个基类BaseClass,有整型变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

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

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

从bicycle和motorcar 派生出摩托车(motorbicycle)类,在继承过程中,注意把vehicle设置为虚基类。

如果不把vehicle设置为虚基类,会有什么问题?编程尝试。

实验内容及实验步骤1.编写程序定义基类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。

错误代码:#include<iostream>using namespace std;class Animal{private:int age;public:Animal(){};};class dog:public Animal {public:void SetAge(int n){age=n;};};int main(){dog one;one.SetAge(23);return 0;}运行结果:正确代码:#include<iostream> using namespace std;class Animal{public:int age;public:Animal(){};};class dog:public Animal {public:void SetAge(int n){age=n;};};int main(){dog one;one.SetAge(23);return 0;}运行结果:2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。

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,我们可以看到其对程序运行结果的影响。

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

继承与派生实验报告

继承与派生实验报告
现从Person类派生出Worker类,该类包括数据成员number用来记录对象的工号、sex
用来记录对象的性别、age用来记录对象年龄、add用来记录对象的家庭住址;包括函数成
员printinfor()用来输出对象的个人信息。
要求:
(1)构造Worker类对象输出该对象的工号、年龄、家庭住址等信息。
b.PrintInfo();
return 0;
}
【实验结果与数据处理】
【实验结论】
(2)在Worker类的printinfor()成员函数中须调用Person类的成员函数PrintName()。
输出结果如:丁一10127男28合肥市长江路369号
分析:注意选择派生类对基类的继承方式。
【实验器材】
微型计算机、Visual C++ 6.0集成软件平台
【实验步骤】
1.编辑源程序。
2.对源程序进行编译并调试程序。
继承与派生实验报告
实验题目
继承与派生
日期
班级
组别
姓名
类型
【实验目的】
1.学会从现有类派生出新类的方式。
2.了解基类成员在派生类中的访问控制。
3.熟悉派生类中构造函数和析构函数的调用顺序。
4.掌握虚基类所要解决的问题。
【实验原理】
定义一个Person类,数据成员包含能够保存姓名的变量name,其中有能够输出姓名的成员函数PrintName()。
};Biblioteka class Worker:public Person
{
public:
Worker(char * n,int nu,char * s,int ag,char *add):Person(n)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机科学与技术学院程序设计报告
程序名称:继承与派生(一)
专业:计算机科学与技术
班级:计算机1103班
学号:
姓名:
指导老师:
设计日期:2012年4月13日
实验四继承与派生(一)
[实验目的]
1、掌握类继承与派生关系以及实现方法,理解类的层次结构;
2、掌握派生类构造函数初始化基类成员和对象成员的方法;
3、掌握赋值兼容原则,掌握派生类的复制构造函数的定义。

[实验内容与步骤]
题目:
由例题1中的point类和circle类继续派生出cylinder,求其表面积Area.
源程序代码:
#include<iostream>
using namespace std;
const double PI=3.14159;
class point //定义point类
{
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<<","<<y<<") ";
}
};
class circle:public point //公有继承point类,派生出circle类{
protected:
double radius;
public:
circle(){x=0;y=0;radius=0;}
circle(double xv,double yv,double vv):point(xv,yv)
{
radius=vv;
}
circle(point p,double vv):point(p)
{
radius=vv;
}
circle(circle &cir):point(cir)
{
radius=cir.radius;
}
double area()
{
return PI*radius*radius;
}
void show()
{
point::show();
cout<<"radius="<<radius<<endl;
}
};
class cylinder:public circle //公有继承circle类,派生出cylinder类{
protected:
double high;
public:
cylinder(){x=0;y=0;radius=0;high=0;}
cylinder(double xv,double yv,double vv,double hv):circle(xv,yv,vv) {
high=hv;
}
cylinder(cylinder &cyl):circle(cyl)
{
high=cyl.high;
}
double area()
{
return(2*PI*radius*high+2*circle::area());
}
void show()
{
cout<<"圆柱体信息:"<<endl;
circle::show();
cout<<"high="<<high<<endl;
}
};
int main() //主函数的定义
{
point point1(2,5);
circle circle1;
circle circle2(1,2,3);
circle circle3(point1,4);
circle1.show();
circle2.show();
circle3.show();
cylinder cylinder1(5,6,11,20);
cylinder1.show();
cout<<"圆柱体面积:"<<cylinder1.area()<<endl; }
实验截图:
[实验体会]
1、掌握类的继承与派生的实现方法;
2、定义合适的派生类构造函数,用于初始化基类成员和对象成员;
3、要理解赋值兼容性原则,掌握派生类的复制构造函数的定义方法;
4、在派生类中可以通过基类名调用基类的成员。

相关文档
最新文档