C++实验九继承

合集下载

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、运算符重载功能等。

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

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

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

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

c 继承的原理

c 继承的原理

c 继承的原理
c语言中的继承是通过结构体来实现的。

在c语言中,结构体
可以包含其他的结构体作为其成员。

当一个结构体继承另一个结构体时,它会直接包含另一个结构体作为自己的成员,从而获取到另一个结构体的所有成员和方法。

在c语言中,我们可以定义一个基类的结构体,然后定义一个派生类的结构体,并将基类的结构体作为派生类的成员。

这样,派生类就可以访问基类的成员和方法。

在继承中,派生类可以对基类的成员进行扩展。

我们可以在派生类中添加新的成员和方法,从而使派生类具有更多的功能。

同时,派生类还可以重新定义基类的成员和方法,以满足自身的需求。

继承的原理在于派生类可以直接访问基类的成员和方法,而无需重新定义它们。

这样可以实现代码的复用和扩展。

当我们在使用派生类的时候,也可以直接操作基类的成员和方法,这样可以简化代码的书写。

需要注意的是,在c语言中,继承是单向的,派生类可以访问基类的成员和方法,但基类不能访问派生类的成员和方法。

此外,c语言中的继承是通过结构体的嵌套实现的,而不是通过
关键字来表示继承关系。

这也是c语言相对于其他面向对象语言的一个区别之处。

综上所述,c语言中的继承是通过结构体的嵌套实现的,派生
类可以直接访问基类的成员和方法,从而实现代码的复用和扩展。

实验9 类的继承和派生

实验9 类的继承和派生

实验9 类的继承和派生一、实验目的1、理解继承的含义,掌握派生类的定义方法和实现;2、理解公有继承下基类成员对派生类成员和派生类对象的可见性,能正确地访问继承层次中的各种类成员;3、理解保护成员在继承中的作用,能够在适当的时候选择使用保护成员以便派生类成员可以访问基类的部分非公开的成员;4、条件编译的运用。

多文件结构的进一步使用。

二、实验内容1、编写一个程序计算出球、圆柱和圆锥的表面积和体积。

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

2、编写一个学生和教师数据输入和显示程序。

其中,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。

要求:(1)将编号、姓名输入和显示设计成一个类person;(2)设计类person的派生类:学生类student和教师类teacher;(3)各个类的声明放在相应的头文件中(*.h),类的实现放在相应的实现文件中(*.cpp):person.h,person.cpp,student.h,student.cpp,teacher.h,teacher.cpp;(4)编写一个主文件(SY4_2.cpp),在该文件中分别定义student、teacher的对象,完成相应功能。

三、实验程序及结果1.#include <iostream>#include <math.h>using namespace std;const double pi=3.1415926;class circle //基类圆{public:circle(double rad){r=rad;}protected:double r;};class ball:public circle //球类{ball(double rad):circle(rad){}void com_surface(){surface=4*pi*r*r;}void com_volume(){volume=4*pi*r*r*r/3;}double get_surface(){return surface;}double get_volume(){return volume;}private:double surface;double volume;};class taper:public circle // 圆锥类{public:taper(double rad,double length):circle(rad){l=length;}void com_surface(){surface=pi*l*r+pi*r*r;}void com_volume(){volume=pi*r*r*sqrt(l*l-r*r)/3;} double get_surface(){return surface;}double get_volume(){return volume;}private:double l; //圆锥侧长double surface;double volume;};class column:public circle //圆柱类{public:column(double rad,double high):circle(rad){h=high;}void com_surface(){surface=pi*r*r*2+2*pi*r*h;} void com_volume(){volume=pi*r*r*h;}double get_surface(){return surface;}double get_volume(){return volume;}private:double h; //圆柱高double surface;double volume;};void main(){_surface();_volume();cout<<"该球的表面积是:"<<b.get_surface()<<endl; cout<<"该球的体积是:"<<b.get_volume()<<endl; cout<<"------------------------------------"<<endl; taper t(3,5);_surface();_volume();cout<<"该圆锥的表面积是:"<<t.get_surface()<<endl; cout<<"该圆锥的体积是:"<<t.get_volume()<<endl; cout<<"------------------------------------"<<endl; column c(3,5);_surface();_volume();cout<<"该圆柱的表面积是:"<<c.get_surface()<<endl; cout<<"该圆柱的体积是:"<<c.get_volume()<<endl; }2、//person.h#include <iostream.h>#include <iomanip.h>const int l=80;class person{ public:void input(){ cout<<"\n input name: ";cin>>name;cout<<"\n certificate no: ";cin>>id;}void print(){ cout<<"\n certificate no: "<<id; }void printname(){ cout<<setw(8)<<name; }private:char name[l],id[l];};//person.cpp#include <iostream.h>#include <iomanip.h>#include<person.h>int main(){person p1;p1.input();p1.print();p1.printname();return 0;}//teacher.h#include <iostream.h>#include <iomanip.h>#include<person.h>class teacher:public person{ public:void input(){ person::input();cout<<" input degree: ";cin>>degree;cout<<" input department: ";cin>>dep;}void print(){ person::print();cout<<"\n degree: "<<"\t"<<degree;cout<<"\n department: "<<"\t"<<dep;}void printname(){ person::printname(); }char degree[l],dep[l];};//teacher.cpp#include <iostream.h>#include <iomanip.h>#include<person.h>#include<teacher.h>int main(){teacher t1;t1.input();t1.print();t1.printname();return 0;}//student.h#include <iostream.h>#include <iomanip.h>#include<person.h>class stud{ public:void input(){ cout<<" input address: ";cin>>addr;cout<<" input telphone no: ";cin>>tel;}void print(){ cout<<"\n address: "<<"\t"<<addr;cout<<"\n telphone no: "<<"\t"<<tel;}private:char addr[l];char tel[l];};class student:private person{ public:void input(){ person::input();cout<<" input years old: ";cin>>old;cout<<" input score no: ";cin>>sno;void print(){ person::print();cout<<"\n tears old: "<<"\t"<<old;cout<<"\n score no: "<<"\t"<<sno;}void printname(){ person::printname(); }private:int old;unsigned long sno;};class score:private student,private stud{ public:void input(){ student::input();stud::input();cout<<"input math score: ";cin>>math;cout<<"input english score: ";cin>>eng;}void print(){ student::print();stud::print();cout<<"\n math score: "<<"\t"<<math;cout<<"\n english svore: "<<"\t"<<eng;cout<<"\n average score: "<<"\t"<<float(math+eng)/2;}void printname(){ student::printname(); }private:int math;int eng;};//student.cpp#include <iostream.h>#include <iomanip.h>#include<person.h>#include<student.h>int main(){stud s1;s1.input();s1.print();student st1;st1.input();st1.print();st1.printname();score sc1;sc1.input();sc1.print();sc1.printname();return 0;}//SY4-2.cpp#include <iostream.h>#include <iomanip.h>#include<person.h>#include<teacher.h>#include<student.h>void main(){ score c1;teacher t1;cout<<"input data for score 1: ";c1.input();cout<<"input data for teacher 1: ";t1.input();cout<<"\n data on student ";c1.printname();c1.print();cout<<"\n data on teacher ";t1.printname();t1.print();}。

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,观察构造函数和析构函数的执行情况。

c面向对象程序课程设计

c面向对象程序课程设计

c面向对象程序课程设计一、教学目标本节课的教学目标是让同学们掌握C面向对象程序的基本概念和语法,包括类、对象、继承、多态等核心概念。

通过学习,同学们能够熟练使用C++编写简单的面向对象程序,培养编程思维和解决问题的能力。

同时,在学习过程中,培养同学们的团队合作意识和自主学习能力。

二、教学内容本节课的教学内容主要包括以下几个部分:1.面向对象程序概述:介绍面向对象程序的基本概念,如类、对象、封装、继承、多态等。

2.类和对象:讲解如何定义一个类,如何创建和使用对象,以及构造函数和析构函数的概念。

3.继承:介绍继承的概念和实现方式,以及继承的好处和注意事项。

4.多态:讲解多态的概念、实现方式以及多态的好处。

5.面向对象程序设计实例:通过实例讲解如何运用面向对象程序设计的方法解决实际问题。

三、教学方法为了更好地实现教学目标,本节课采用以下几种教学方法:1.讲授法:讲解面向对象程序的基本概念、语法和实例。

2.讨论法:同学们进行小组讨论,分享学习心得和解决问题的方法。

3.案例分析法:分析实际编程案例,让同学们更好地理解面向对象程序设计的方法。

4.实验法:安排课后的编程实践,让同学们动手编写面向对象的程序,巩固所学知识。

四、教学资源为了支持本节课的教学内容和教学方法的实施,准备以下教学资源:1.教材:《C++面向对象程序设计》等相关教材。

2.参考书:提供一些关于C++面向对象程序设计的参考书籍,供同学们课后自主学习。

3.多媒体资料:制作精美的PPT,直观地展示面向对象程序设计的相关概念和实例。

4.实验设备:提供计算机和编程环境,让同学们能够进行实际的编程练习。

五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观、公正地评价同学们的学习成果。

评估方式包括:1.平时表现:考察同学们在课堂上的参与程度、提问回答、小组讨论等,占总评的20%。

2.作业:布置与课程内容相关的编程作业,让同学们巩固所学知识,占总评的30%。

C++随堂测试(继承、多态、重载)

C++随堂测试(继承、多态、重载)

C++随堂测试(继承、多态、重载)一、选择题()1.在C++中,类与类之间的继承关系具有()A)自反性 B)对称性 C)传递性 D)反对称性2.在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限()A)受限制 B)保持不变 C)受保护 D)不受保护3.在下列运算符中,不能重载的是( )A.!B. sizeofC. newD. delete4.不能用友元函数重载的是( )。

A.=B.==C.<=D.++5.在哪种派生方式中,派生类可以访问基类中的protected成员()A)public和private B)public、protected和privateC)protected和private D)仅protected6.下列函数中,不能重载运算符的函数是( )。

A.成员函数B.构造函数C.普通函数D.友元函数7.下面叙述错误的是()。

A)基类的protected成员在派生类中仍然是protected的B)基类的protected成员在public派生类中仍然是protected的C)基类的protected成员在private派生类中是private的D)基类的protected成员不能被派生类的对象访问8.如果表达式++i*k时中的”++”和”*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为()。

A.operator*(i.operator++(),k)B.operator*(operator++(i),k)C.i.operator++().operator*(k) D.k.operator*(operator++(i))9.下面叙述错误的是()。

A)派生类可以使用private派生B)对基类成员的访问必须是无二义性的C)基类成员的访问能力在派生类中维持不变D)赋值兼容规则也适用于多继承的组合10.下列虚基类的声明中,正确的是:()A)class virtual B: public A B)class B: virtual public AC)class B: public A virtual D)virtual class B: public A11.已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下列关于这个函数的叙述中,错误的是()。

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

实验九继承1、实验目的
1)掌握继承的实现方法;
2)继承中常见问题的处理方法。

2、实验内容
2.1派生类----单继承
1.分析下面的程序,指出程序运行的结果
#include<iostream.h>
class CBase
{public:
void fn1();
};
void CBase::fn1()
{cout<<"调用基类类的函数fn1()\n";
}
class CDerived:public CBase
{
public:
void fn1();
};
void CDerived::fn1()
{cout<<"调用派生类的函数fn1()\n";
}
void main()
{
CDerived d1;
CBase *pb=&d1;
CBase &pd=d1;
d1.fn1();
pb->fn1();
pd.fn1();
}
运行结果:
2.2编写并调试程序:
1)p158 4.10
2)定义一个图形类,其中有保护类型的成员数据:高度和宽度,一个公有的构造函数。

由该图形类建立两个派生类:矩形类和等腰三角形类。

在每个派生类中都包含一个函数area(),分别用来计算矩形和等腰三角形的面积。

1.程序设计如下:
#include<iostream.h>
class picture
{
protected:
double h,w;
public:
picture (double i,double j){h=i;w=j;}
};
class jpicture:public picture
{double mi;
public:
};
class sanjiaoxing:public picture
{
double mi;
public:
};
void main()
{ jpicture a(1,2);
sanjiaoxing b(3,4);
a.area();
b.area();
}
2.实验结果:
2.3多继承和虚基类
1)分析下面的程序,指出程序运行的结果:
#include<iostream.h>
class CBase1
int x;
public:
CBase1()
{x=0;cout<<"调用构造函数CBase1()!\n";}
CBase1(int a)
{x=1;cout<<"调用构造函数CBase1(int)!\n";}
~CBase1(){cout<<"调用析构函数~CBase1()!\n";} };
class CBase2
{int y;
public:
CBase2()
{y=0;cout<<"调用构造函数CBase2()!\n";}
CBase2(int a)
{y=a;cout<<"调用构造函数CBase2(int)!\n";}
~CBase2(){cout<<"调用析构函数~CBase2()!\n";} };
class A
{int x;
public:
A(){x=0;cout<<"调用构造函数A()!\n";}
A(int a){x=a;cout<<"调用构造函数A(int)!\n";}
~A(){cout<<"调用析构函数~A()!\n";}
};
class CDerived:public CBase1,virtual public CBase2
{
A a;
public:
CDerived()
{cout<<"调用构造函数CDerived()!\n";}
CDerived(int x,int y,int z):a(x),CBase1(y),CBase2(z)
{cout<<"调用构造函数CDerived(int,int,int)!\n";}
~CDerived(){cout<<"调用析构函数~CDerived()!\n";} };
void main()
{
CDerived *x=new CDerived;
CDerived y(2,3,4);
delete x;
cout<<"main()函数结束!\n";
}
实验结果:
编写并调试程序
1)p159 4.11
2)定义一个人员类cpeople,其属性有(保护类型):姓名、性别、年龄;从中派生出学生类cstudent,添加属性:学号、入学时间和入学成绩;从cpeople类再派生出教师类cteacher,添加属性:职务、部门、工作时间;有cstudent类派生研究生类cgraduate,添加属性:研究方向和导师,由cgraduate和cteacher共同派生出在职研究生类cgradonwork,分别定义其中的构造函数和输出函数。

主函数中定义各种类的对象,并完成测试。

1.程序设计如下:
2.实验结果:
3、实验结论:。

相关文档
最新文档