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

c++继承实验报告一、实验目的通过本次实验,我们的目的是深入了解C++中的继承概念及其运用,了解C++中的多态及其实现。
二、实验内容本次实验的主要内容是:1. 完成一个基类Animal和两个派生类Cat、Dog,实现不同动物的基本属性,如年龄、体重、颜色等。
2. 完成一个动物园类Zoo,该类包含了一个动物园实例的属性,如名称和所含动物的数量,该类还能展示动物园里的所有动物的信息,如年龄、体重、颜色等。
3. 基于上述,实现两个派生类WildZoo和PetZoo,其中WildZoo的动物全是野生动物,而PetZoo的动物全是宠物动物。
4. 扩展以上功能,实现运算符重载,比较两个动物园中的动物的数量。
5. 扩展以上功能,实现动物类中的虚函数和多态,并在动物园类中调用虚函数。
三、实验设计1. Animal类设计Animal类作为基类,主要实现各种动物的基本属性,如样例代码:```c++class Animal{public:Animal(int age, float weight, string color);virtual void sound();private:int m_age;float m_weight;string m_color;};```在此基础上,两个派生类Cat和Dog重写了sound方法,使其发出“喵喵”和“汪汪”声。
如样例代码:2. Zoo类设计Zoo类作为实现动物园概念的类,需要包含有关动物园的各种属性、方法。
具体要求如下:(1)基于Animal类创建动物园中所有动物的实例。
(2)实现对动物园中所有动物信息的显示功能。
具体实现如下所示:```c++class Zoo{public:Zoo(string name);~Zoo();};```可以看到,该类中实现了添加动物的方法addAnimal、动物信息的展示方法showInfo、获取动物数量的方法getAnimalCount、获得园区名称的方法getName、运算符重载功能等。
实验五 继承与派生2(报告)

验
内
容
创建一个表示雇员信息的employee类,其中包含数据成员name、empNo和salary,分别表示雇员的姓名、编号和月薪。再从employee类派生出3个类worker、technician和salesman,分别代表普通工人、科研人员、销售人员。三个类中分别包含数据成员productNum、workHours和monthlysales,分别代表工人每月生产产品的数量、科研人员每月工作的时数和销售人员每月的销售额。
2、派生类的定义(worker普通工人类、technician科研人员类和salesman销售人员类)
worker普通工人类的定义,公有继承employee,增加变量productNum(产品数量)与profit(每件产品的利润)及用来计算雇员月薪pay()函数(计算员工月工资并输出)。
technician科研人员类公有继承employee,增加变量workHours(工作时间)及hoursalary(每小时的工资)及pay()函数(功能同上)。
salesman销售人员类也是公有继承employee,增加monthlysales(月销售额)、ti_cheng(销售额提成)及pay()函数(功能同上)。
如上图主函数。定义三个不同工种的员工,并输出信息。
实
验
结
果
运行结果:
出
现
的
问
题
及
解
决
方
案
程序编译一次成功了,这次没有意外。
课程名称
C++程序设计A2
班级
1420561
实验日期
2015.01.01
姓名
刘翔翔
学号
21
实验成绩
c 继承与派生实验报告

c 继承与派生实验报告
C 继承与派生实验报告
实验目的:通过实验,掌握C语言中继承与派生的概念和使用方法,加深对面向对象编程的理解。
实验内容:在C语言中,继承与派生是面向对象编程中非常重要的概念。
在本次实验中,我们将通过一个简单的例子来演示C语言中的继承与派生的用法。
首先,我们定义一个基类(父类)Person,包括姓名和年龄两个成员变量,以及一个显示信息的成员函数。
然后,我们定义一个派生类(子类)Student,继承自Person类,新增一个成员变量学号,并重写显示信息的成员函数。
在实验中,我们首先创建一个Person对象,设置姓名和年龄,然后调用显示信息函数,观察结果。
接着,我们创建一个Student对象,设置姓名、年龄和学号,再次调用显示信息函数,观察结果。
实验结果:通过实验,我们成功实现了C语言中的继承与派生。
我们发现,通过继承,子类Student可以直接使用父类Person中的成员变量和成员函数,同时可以新增自己的成员变量和函数。
这样的设计使得代码更加简洁和灵活,提高了代码的复用性和可维护性。
结论: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来创建具体的按钮和文本框。
这样,我们可以通过继承和派生的方式,实现不同的界面元素,并且可以在派生类中添加新的功能,如按钮的点击事件和文本框的输入验证。
继承与派生的注意事项:在使用继承与派生的过程中,我们需要注意一些问题。
首先,派生类可以访问基类的公有成员,但不能访问基类的私有成员。
实验三_继承与派生

武汉科技大学C++上机实验报告实验名称:实验三继承与派生专业班级:姓名:学号:一、实验目的1.学习声明和使用类的继承关系,声明派生类。
2.熟悉各种继承方式下对基类成员的访问控制。
二、实验内容1.声明一个基类Shape,在此基础上派生出Rectangle和Circle类,二者都具有GetArea()函数以计算对象的面积;使用Rectangle类再创建一个派生类Square。
实现并测试这些类。
2.声明一个object类,有数据成员weight及相应的操作函数,由此派生出box类,增加数据成员height和width及相应的操作函数,声明一个box对象,实现并测试这些类,并在相应的构造函数和析构函数中给出提示信息,观察构造函数和析构函数的调用顺序。
3.声明一个基类BaseClass,派生出类DerivedClass。
BaseClass有成员函数fn1( )和fn2( ),DerivedClass也有成员函数fn1( )和fn2( )。
两个类的成员函数中分别给出调用此函数时的提示信息。
在主函数中声明一个DerivedClass的类对象,分别用DerivedClass类的对象以及BaseClass和DerivedClass类的指针来调用fn1( )和fn2( ),观察并分析运行结果。
4.从people类派生出student类,添加属性:班号char classNO[7];从people类派生出teacher类,添加属性:职务char principalship[11]、部门char department[21]。
从student类中派生出graduate类,添加属性:专业char subject[21]、导师teacher advisor;从graduate类和teacher类中派生出TA(助教)类,注意虚基类的使用。
用成员函数实现对人员信息的录入和显示。
附:people类的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。
实验四 继承与派生1(报告)

验
环
境
Visual Studio 2010
实
验
内
容
编写程序计算出球、圆柱、圆锥,都含有求表面积和体积。
要求:
(1)定义一个基类圆类至少含有一个数据成员半径;
(2)定义基类成员的派生类:球、圆柱、圆锥,都含有球表面积和体积的成员函数和输出函数。
(3)在主函数中求球、圆柱、圆锥的表面积和体积。
算
法
描
述
及
实
验
步
骤
1、基类圆的定义
ห้องสมุดไป่ตู้如上图,包含半径、周长、面积,能够输出圆的基本信息。
2、派生类的定义(球、圆柱、圆锥)
派生类球(Ball)的定义,公有继承Circle,增加变量表面积S与体积V及输出函数。
派生类圆柱(Column)公有继承Circle,增加自己的属性变量高high及表面积S、体积V,输出函数。
派生类圆锥(Cone)也是公有继承Circle,增加高high、表面积S、体积V和输出函数。
如上图主函数。
实
验
结
果
第一次运行结果:
第二次运行结果:
出
现
的
问
题
及
解
决
方
案
程序编译一次成功了,但运行结果不对。原因是在计算圆锥体积和球的体积时要用到两个分数1/3、4/3参与运算,但在计算机中这两个分数是由两个整形变量计算而来的,其结果也是一个整形变量(0和1),所以运行结果错误,将其改成1.0/3与4.0/3即可,这样就是两个float型变量计算,结果也是我们要的结果了。
课程名称
C++程序设计A2
班级
1420561
C++实验报告九

VC++程序设计实验报告实验九题目:继承与派生专业学生姓名班级学号指导教师指导单位日期一、实验目的1. 理解类的继承概念,能够定义和使用类的继承关系2.掌握派生类的声明与定义方法3. 掌握公有、私有和保护派生的访问特性二、实验内容1.设计一个大学的类系统,学校有学生、老师、职员,每种人员都有自己的特性,他们之间又有相同的地方。
利用继承机制定义这个系统中的各个类及类上的必须操作。
2.假定车可分为货车、客车又可分为轿车、面包车和公共汽车。
请设计相应的类层次结构并加以实现。
三、实验结果及其结果分析1.(1)源程序:#include <>#include <>class Person{protected:char m_strName[10];int m_nSex;int m_nAge;public:Person(char *name,int age,char sex){strcpy(m_strName, name);m_nSex= (sex=='m'0:1 );m_nAge = age;}void setName(char *name){strcpy(m_strName, name);}void setSex(int sex){m_nSex= (sex=='m'0:1 );}void setAge(int age){m_nAge = age;}char * getName(){return m_strName;}int getAge(){return m_nAge;}int getSex(){return m_nSex;}void ShowMe(){cout<<" 姓名:"<<m_strName<<endl;cout<<" 性别:"<<(m_nSex==0"男":"女")<<endl;cout<<" 年龄:"<<m_nAge<<endl;}};class Teacher : public Person{char m_strDept[20];int m_fSalary;public:Teacher(char *name,int age,char sex,char *dept,int salary) :Person(name,age,sex){strcpy(m_strDept, dept);m_fSalary = salary;}void ShowMe() {Person::ShowMe();cout<<" 工作单位:"<<m_strDept<<endl;cout<<" 月薪:"<<m_fSalary<<endl;}void setSalary(int salary){m_fSalary = salary;}int getSalary(){return m_fSalary;}class Student : public Person{char m_strID[12];char m_strClass[12];public:Student(char *name,int age,char sex,char *ID,char *Class) :Person(name,age,sex){strcpy(m_strID, ID);strcpy(m_strClass, Class);}void ShowMe(){cout<<" 学号:"<<m_strID<<endl;Person::ShowMe();cout<<" 班级:"<<m_strClass<<"\n";}void setID(char * ID){strcpy(m_strID, ID);}void setClass(char *Class){strcpy(m_strClass, Class);}char* getID(){return m_strID;char* getClass(){return m_strClass;}};class Employee:public Person{int m_fSalary;public:Employee(char *name,int age,char sex,int salary) :Person(name,age,sex){m_fSalary = salary;}void setSalary(int salary){m_fSalary = salary;}int getSalary(){return m_fSalary;}void ShowMe(){Person::ShowMe();cout<<" 工资:"<<m_fSalary<<"\n";}};void main(){Teacher teacher1("周明",38,'m',"计算机系",3800);Student std1("王芳",20,'f',"03016003","计算机03");Employee emPloyee1("李鑫",25,'f',2000);();cout<<"--------------------"<<endl;();cout<<"--------------------"<<endl;();(40);(4500);(21);(26);(2000);cout<<"--------------------"<<endl;cout<<"修改各类人员的属性后:"<<endl;();cout<<"--------------------"<<endl;();cout<<"--------------------"<<endl;();}(2)实验结果:2.(1)源程序:#include<>class vehicle // 定义基类vehicle{public: // 公有函数成员vehicle(int in_wheels,float in_weight); // 给数据成员初始化int get_wheels(); // 获取车轮数float get_weight(); // 获取汽车重量void setWeels(int wls);void setWeight(float wt);void display(){cout<<"车轮数:"<<wheels<<" 汽车重量:"<<weight<<endl; }private: // 私有数据成员int wheels; // 车轮数float weight; // 表示汽车承重};vehicle::vehicle(int in_wheels,float in_weight){wheels = in_wheels;weight = in_weight;}float vehicle::get_weight(){return weight;}int vehicle::get_wheels(){return wheels;}void vehicle::setWeels(int wls){wheels = wls;void vehicle::setWeight(float wt){weight = wt;}class truck:public vehicle // 定义货车类truck{private: // 新增私有数据成员float weight_load; // 承重public: // 新增公有成员函数truck(int wheel,float wt,float wl):vehicle(wheel,wt){ weight_load = wl;}float getLoads(){return weight_load;}void display(){vehicle::display();cout<<"汽车承重"<<weight_load<<endl;}};//车和客车,客车又可分为轿车、面包车和公共汽车class car:public vehicle // 定义客车类carint passenger_load; // 新增私有数据成员,表示载客数public: // 新增公有成员函数car(int in_wheels,float in_weight,int people=4):vehicle(in_wheels,in_weight){passenger_load = people;}int getPassengers(){return passenger_load;}void setPassengers(int people){passenger_load = people;}void display(){vehicle::display();cout<<"载客数:"<<passenger_load<<endl;}};void main(){truck truck1(8,400,100000); // 货车car car1(4,20); // 客车car saloon_car(4,10,5); // 轿车car microbus(6,10,18); // 面包车car bus(6,20,30); // 公共汽车// 显示相关信息();cout<<"---------------------"<<endl;();cout<<"---------------------"<<endl;();cout<<"---------------------"<<endl;();cout<<"---------------------"<<endl;();}(2)实验结果:四、实验收获与体会通过本次试验,我加深了对继承与派生的进一步理解。
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、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第七章继承与派生实验目的
学习声明和使用类的继承关系,声明派生类
熟悉不同继承方式下对基类的访问控制
学习使用虚基类解决二义性问题
实验内容
7.1
#include <iostream>
using namespace std;
class animal
{
public:
private:int age;
};
class dog:public animal
{
public:
void setage(int n);
private:
};
void dog::setage(int n)
{
age=n;
}
int main()
{
dog d1;
d1.setage(5);
return 0;
}
无法访问age,因为公有继承的继承规则是基类的私有类不可访问、#include <iostream>
using namespace std;
class animal
{
public:int age;
private:
};
class dog:public animal
{
public:
void setage(int n);
private:
};
void dog::setage(int n)
{
age=n;
}
int main()
{
dog d1;
d1.setage(5);
return 0;
}
把age移到private里即可
7.2
#include <iostream>
using namespace std;
class baseclass
{
public:
baseclass(int n)
{
number=n;
cout<<"调用了基类的构造函数"<<endl;
}
~baseclass()
{
cout<<"调用了基类的析构函数"<<endl;
}
private:
int number;
};
class derivedclass:public baseclass
{
public:
derivedclass(int n):baseclass(n)
{
cout<<"调用了派生类的构造函数"<<endl;
}
~derivedclass()
{
cout<<"调用了派生类的析构函数"<<endl;
}
private:
};
int main()
{
derivedclass d(3);
return 0;
}
7.3
#include <iostream>
using namespace std;
class vehicle
{
public:
void run();
void stop();
vehicle(int m,int w)
{
maxspeed=m;
weight=w;
}
private:
int maxspeed;
int weight;
};
void vehicle::run()
{
cout<<"it is running"<<endl;
}
void vehicle::stop()
{
cout<<"stop"<<endl;
}
class bicycle:public vehicle
{
public:
bicycle(int m,int w,int h):vehicle(m,w)
{
height=h;
}
private:
int height;
};
class motorcar:public vehicle
{
public:
motorcar(int m, int w, int s):vehicle(m,w)
{
seatnum=s;
}
private:
int seatnum;
};
class motorcycle:public bicycle,public motorcar
{
public:
motorcycle(int m,int w,int h,int s):vehicle(m,w),bicycle(m,w,h),motorcar(m,w,s) {
}
};
int main()
{
motorcycle cat(1,2,3,4);
cat.run();
cat.stop();
return 0;
}
不设虚基类报错指代不明是哪一层函数#include <iostream>
using namespace std;
class vehicle
{
public:
void run();
void stop();
vehicle(int m,int w)
{
maxspeed=m;
weight=w;
}
private:
int maxspeed;
int weight;
};
void vehicle::run()
{
cout<<"it is running"<<endl;
}
void vehicle::stop()
{
cout<<"stop"<<endl;
}
class bicycle:virtual public vehicle
{
public:
bicycle(int m,int w,int h):vehicle(m,w)
{
height=h;
}
private:
int height;
};
class motorcar:virtual public vehicle
{
public:
motorcar(int m, int w, int s):vehicle(m,w)
{
seatnum=s;
}
private:
int seatnum;
};
class motorcycle:public bicycle,public motorcar
{
public:
motorcycle(int m,int w,int h,int s):vehicle(m,w),bicycle(m,w,h),motorcar(m,w,s) {
}
};
int main()
{
motorcycle cat(1,2,3,4);
cat.run();
cat.stop();
return 0;
}。