c++继承与派生实验报告
- 格式:doc
- 大小:183.00 KB
- 文档页数:8
c 继承与派生实验报告
C 继承与派生实验报告
实验目的:通过实验,掌握C语言中继承与派生的概念和使用方法,加深对面向对象编程的理解。
实验内容:在C语言中,继承与派生是面向对象编程中非常重要的概念。
在本次实验中,我们将通过一个简单的例子来演示C语言中的继承与派生的用法。
首先,我们定义一个基类(父类)Person,包括姓名和年龄两个成员变量,以及一个显示信息的成员函数。
然后,我们定义一个派生类(子类)Student,继承自Person类,新增一个成员变量学号,并重写显示信息的成员函数。
在实验中,我们首先创建一个Person对象,设置姓名和年龄,然后调用显示信息函数,观察结果。
接着,我们创建一个Student对象,设置姓名、年龄和学号,再次调用显示信息函数,观察结果。
实验结果:通过实验,我们成功实现了C语言中的继承与派生。
我们发现,通过继承,子类Student可以直接使用父类Person中的成员变量和成员函数,同时可以新增自己的成员变量和函数。
这样的设计使得代码更加简洁和灵活,提高了代码的复用性和可维护性。
结论: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(身份证号)等等。
实验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类的成员函数完成三条边是否能构成三角形的检验和三角形面积计算,面积显示。
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)实验结果:四、实验收获与体会通过本次试验,我加深了对继承与派生的进一步理解。
实验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 派生实验报告
实验名称:C 派生实验报告
实验目的:通过C语言的派生(继承)特性,加深对面向对象编程的理解,掌
握C语言中派生的实现方法。
实验内容:通过编写一个简单的程序,演示C语言中派生的实现方法。
在程序
中创建一个基类和一个派生类,通过派生类继承基类的属性和方法,并添加新
的属性和方法。
然后在主函数中调用派生类的方法,验证派生的正确性。
实验步骤:
1. 创建一个基类,包含一些属性和方法;
2. 创建一个派生类,继承基类的属性和方法,并添加新的属性和方法;
3. 在主函数中实例化派生类对象,并调用其方法,验证派生的正确性。
实验结果:经过实验,成功实现了C语言中的派生(继承)特性。
派生类可以
继承基类的属性和方法,并且可以添加新的属性和方法,实现了代码的复用和
扩展。
实验结论:通过本次实验,加深了对C语言中派生特性的理解,掌握了C语言
中派生的实现方法。
同时也对面向对象编程有了更深入的认识,为以后的软件
开发打下了良好的基础。
实验总结: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改成公有成员变量后从头编译就可以够够够够了。
程序名:。
错误代码:#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;(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;(23);return 0;}运行结果:2.编写程序概念一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数顶用cout输出提示信息,观看构造函数和析构函数的执行情形。
实验四派生类与继承
【实验类型】验证性实验【实验课时】2学时【实验目的】
(1)理解类的继承的概念,能够定义和使用类的继承关系。
(2)掌握派生类的声明与定义方法。
(3)熟悉公有派生和私有派生的访问特性。
(4)学习虚基类在解决二义性问题中的作用。
【实验环境】
硬件:计算机
软件:Microsoft Visual C++
【实验内容】
1、按要求阅读、编写、调试和运行以下程序。
(1)实验内容
①定义一个基类MyArray,基类中可以存放一组整数。
class MyArray
{public:
MyArray(int leng);
~MyArray();
void Input();
void Display();
protected:
long int *alist; 验题目
ⅱ.实验目的
ⅲ.实验过程(含程序代码)
ⅳ.实验结果
ⅴ.实验思考题
②验报告书写要整洁、有条理。
第四次试验报告
班级:计算机1204
姓名:杨天野
学号:20123914 题目一(1)定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age 改为公有成员变量,还回有问题吗?编程试之。
源程序:
#include<iostream>
using namespace std;
class Animal
{
private:
int age;
};
class dog:public Animal
{
public:
SetAge(int n);
};
dog::SetAge (int n)
{
age = n;
}
int main()
{
dog d1;
d1.SetAge (90);
return 0;
}
截屏:
错误:‘age’ : cannot access private member declared in class ‘Animal’
改为公有变量时:
源程序:
#include<iostream>
using namespace std;
class Animal
{
public:
int age;
};
class dog:public Animal
{
public:
SetAge(int n);
};
dog::SetAge (int n)
{
age = n;
}
int main()
{
dog d1;
d1.SetAge (90);
return 0;
}
截图:
题目二:
(2)定义一个基类BaseClass,有整型变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。
源程序:
#include<iostream>
using namespace std;
class baseclass
{public:
baseclass()
{cout<<"构造了基类的一个构造函数"<<endl;}
~baseclass()
{cout<<"构造了基类的一个析构函数"<<endl;}
private:
int Number;
};
class DerivedClass:public baseclass
{public:
DerivedClass()
{cout<<"构造了一个派生类的构造函数"<<endl;} ~DerivedClass()
{ cout<<"构造了一个派生类的析构函数"<<endl; }};
int main()
{DerivedClass n;
return 0;
}
截图:
题目三:
(3)定义一个车(vehicle)基类,具有Maxspeed、Weight等成员,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。
自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNun)等属性。
从bicycle和motorcar派生出摩托车(motorbicycle)类,在继承过程中,注意把vehicle设置为虚基类。
如果不把vehicle设置为虚基类,会有什么问题?编程试之。
(4)编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。
再从bicycle和motorcar 派生出摩托车(motorcycle)类,在main()函数中测试这个类。
程序名:lab7_3.cpp.
源程序:
#include <iostream>
using namespace std;
class vehicle
{
private:
int a;
};
class bicycle:virtual public vehicle
{};
class motorcar:virtual public vehicle
{};
class motorcycle:public bicycle,public motorcar
{};
int main()
{
motorcycle m;
cout<<sizeof(motorcycle)<<endl;
return 0;
}
编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统会报错,无法编译成功。
这是因为若不把vehicle设置为虚基类,会出现二义性错误,该程序不能成功编译。
#include <iostream>
using namespace std;
class vehicle
{
private:
int a;
};
class bicycle: public vehicle
{
};
class motorcar: public vehicle
{
};
class motorcycle:public bicycle,public motorcar
{
};
int main()
{
motorcycle m;
cout<<sizeof(motorcycle)<<endl;
return 0;
}
并没有出现无法编译的情况,只是出现了一个警告!
实验感悟:
在这次实践中,是我更加深刻的了解了继承与派生的一些基本做法,学习到了课堂上学不到的东西,亲身实践其中,并乐在其中,为我又一次学习并掌握了新的知识而高兴。
在这里,我要特别感谢那些在这次实践中给我帮助的老师和同学,谢谢你们了!!。