C 实验五 多态程序设计
C++实验报告五--继承与多态性 -

南昌航空大学实验报告2011年11月16号课程名称:面向对象程序设计B 实验名称:继承与多态性班级:姓名:同组人:无指导教师评定: 签名:一、实验目的根据现有类建立新类;学习构造基类和虚函数的用法。
二、实验内容应用VC++6.0的编辑环境构造一个类Jhtx及其派生类,该类主要实现关于几何图形的基本操作。
对于基类“几何图形”,有求面积、求体积的函数(纯虚函数),其派生类圆和矩形主要有初始化(构造函数),求面积,求周长操作,类圆的派生类圆球和圆柱有求表面积、体积操作。
试在主函数中分别定义圆、圆球、圆柱以及矩形的对象,并调用其成员函数实现其相应操作。
三、概要设计要实现的功能:求类圆和矩的面积、周长,求类圆的派生类圆球和圆柱表面积、体积;函数原型:double Ball::GetArea();double Ball::Getvolume();double Circle::GetArea();double Circle::Getperimeter();double Column::GetArea();double Column::Getvolume(); double Rectangle::GetArea(); double Rectangle::Getperimeter(); void Show();四、详细设计定义纯虚函数:virtual double Get_Girth()=0; virtual double Get_Volume()=0;virtual double Get_SurArea()=0; virtual double Get_Area()=0;求圆的面积的操作:double Circle::GetArea(){return M*radiums*radiums;}求圆周长的操作:double Circle::Getperimeter(){return 2*M*radiums;}求球表面积的操作:double Ball::GetArea(){return 4.0*M*radiums*radiums;}求球体积的操作:double Ball::Getvolume(){return 4/3*M*radiums*radiums*radiums;}求圆柱表面积的操作:double Column::GetArea(){return 2*M*(radiums*H+radiums*radiums);}求圆柱体积的操作:double Column::Getvolume(){return M*H*radiums*radiums;}求矩形面积的操作:double Rectangle::GetArea(){return Long*Wide;}求矩形周长的操作:double Rectangle::Getperimeter(){return 2*(Long+Wide);}五、程序调试在函数调试的过程中,出现了以下错误提示信息:1、 error C2470: “Circle”: 看起来像函数定义,但没有参数列表;跳过明显的函数体;原因为在语句“double Circle::GetArea()”将域作用符“::”错写为“:“;经调试无误后,运行的结果为:六、实验总结通过这次的试验,我明显的感觉到自己对这方面的知识掌握的还不够熟练,不能顺利地、流畅地运用这方面的知识,因为我没有在规定的时间内完成程序的设计,课后还是要多复习。
大学C 上机实验题目(版)

20XX年复习资料大学复习资料专业:班级:科目老师:日期:实验前言(建议认真阅读)一、上机实验的目的上机实验的目的是提高学生的分析问题、解决问题的能力和动手能力,通过实践环节理解C++语言的基本结构和程序设计方法。
通过亲手编程掌握C++语言编程的方法。
二、实验基本内容为了使学生在上机实验时目标明确,本实验指导书针对课程内容编写了五个实验。
学生在课内机时先完成指导书中标有“*”号的程序,理解所学的知识,在此基础上再编写其他应用程序。
指导书中的五个个实验如下:1. 函数与编译处理2. 指针与引用3. 类和对象4. 继承和派生类5. 多态性三、实验提交(特别提醒)1. 实验题目以附件形式提交,每个附件限一个源程序,附件以实验编号-题号-自己学号.cpp命名;如学号为20XXXX20XXXX20XXXX34的同学提交实验1的第5题,则附件命名方式为:1-5-20XXXX20XXXX20XXXX34.cpp,错误提交的将视为未提交。
2. 提交时间定为该次实验课的一周内,过期不再接收。
四、评分和作弊处理1. 要求提交实验题总数为6题(带“*”号),占期末总评成绩的20XX%;2. 存在抄袭和被抄袭的作业,无论抄袭与被抄袭者,本门课程平时成绩以零分记。
存在两次及两次以上抄袭和被抄袭者,本门课程以不及格记。
五、实验课要求(重点强调)1. 严禁QQ、MSN等即时软件工具聊天;2. 严紧接听手机、发送短信;3. 严紧玩游戏。
实验1 函数与编译处理一、实验目的1. 掌握函数声明、定义和使用的方法;2. 掌握形参与实参之间的对应关系;3. 掌握函数调用时,形参、实参之间的“值传递”和“引用传递”的区别;4. 掌握函数递归调用的方法;5. 掌握全局变量、局部变量、静态变量的使用方法;6. 掌握文件包含的使用方法。
二、实验内容1. 定义两个函数swap1和swap2,目的是实现两个整数的次序交换,其中swap1的参数是传递值参数,swap2的参数是引用参数,在程序中分别调用这两个函数,其输出结果如下所示:初始值:x=1,y=2调用swap1后的结果:x=1 y=2调用swap2后的结果:x=2 y=12. 编写一个函数,用来计算从键盘上输入的整数的阶乘。
多态编程实验报告

一、实验目的1. 理解多态的概念和原理。
2. 掌握多态编程的基本方法。
3. 通过实验加深对多态编程的理解和应用。
二、实验环境1. 操作系统:Windows 102. 编程语言:Java3. 开发工具:Eclipse三、实验内容1. 多态的基本概念2. 多态的实现方法3. 多态的应用实例四、实验步骤1. 多态的基本概念多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
在Java中,多态主要通过继承和重写方法来实现。
2. 多态的实现方法(1)继承在Java中,通过继承可以实现多态。
子类继承父类的方法和属性,可以重写父类的方法,使得子类的方法具有多态性。
(2)重写方法重写方法是指在子类中重写父类的方法,使得子类的方法具有多态性。
重写方法必须满足以下条件:- 方法名、返回类型、参数列表与父类方法相同;- 子类和父类之间必须存在继承关系。
(3)方法重载方法重载是指在同一个类中,存在多个同名方法,但参数列表不同。
方法重载可以实现多态,因为根据传入的参数列表,可以调用不同的方法。
3. 多态的应用实例下面通过一个简单的例子来展示多态的应用。
(1)创建一个动物类```javapublic class Animal {public void makeSound() {System.out.println("Animal makes a sound");}}```(2)创建两个子类,分别代表狗和猫```javapublic class Dog extends Animal {@Overridepublic void makeSound() {System.out.println("Dog barks");}}public class Cat extends Animal {@Overridepublic void makeSound() {System.out.println("Cat meows");}}```(3)创建一个方法,接受一个Animal类型的参数,并调用其makeSound方法```javapublic class Test {public static void main(String[] args) {Animal dog = new Dog();Animal cat = new Cat();makeSound(dog);makeSound(cat);}public static void makeSound(Animal animal) {animal.makeSound();}}```输出结果:```Dog barksCat meows```通过上面的例子,我们可以看到,尽管我们传递的是Animal类型的参数,但在调用makeSound方法时,会根据实际对象的类型调用相应的方法,实现了多态。
C++程序设计-实验5 多态

实验5 多态一、实验目的1.了解多态的概念。
2.了解虚函数的作用及使用方法。
3. 了解静态联编和动态联编的概念和方法。
4.掌握纯虚函数和抽象类的概念和方法。
二、实验准备1.复习多态的概念。
2.理解虚函数在多态性的作用以及纯虚函数和抽象类的用法。
三、实验内容1、某公司雇员(employee)包括经理(manager),技术人员(technician)销售员(saler)。
要求:以employ类为基类派生出manager,technician和saler。
employee类的属性包括姓名、职工号、工资级别,月薪(实发基本工资加业绩工资)。
操作包括月薪计算函数(pay()),该函数要求输入请假天数,扣去应扣工资后,得出实发基本工资。
technician类派生的属性有每小时附加酬金和当月工作时数,称业绩工资。
也包括同名的pay()函数,工资总额为基本工资加业绩工资。
saler类派生的属性有销售总额,总额的10%作为业绩工资。
工资总额为基本工资加业绩工资。
manager类派生的属性有固定奖金,固定奖金作为业绩工资。
工资总额为基本工资加业绩工资。
编程实现工资管理。
特别注意pay()的定义和调用方法:先用同名覆盖,再用运行时多态。
提示:给出基类的定义如下,请完成派生类的定义,并运用主函数测试运行时的多态。
#include<iostream>#include <string>using namespace std;static int Grades[]={500,600,750,1000,1400,2000,2800,4000};class employee{protected:string name;//姓名int ID;//职工号int grade;//工资级别double salary;//月double base_salary;//基本月薪double career_salary;//业绩工资public:employee(string="",int=0,int=0);virtual void pay();//月薪计算函数void show();double getsalary(){return salary;}double getbase_salary(){return base_salary;}double getcareer_salary(){return career_salary;}};2、在题1的基础上增加公司类(Company)公司包括若干名经理(manager),技术人员(technician)销售员(saler),数量由用户输入,公司还包括名称、地址、电话等常见属性,要求计算公司每月发出的工资总额。
《C#程序设计》上机实验报告(2)

《Visual C#程序设计》课程上机实验报告专业 _________________班级学号________________姓名 ______________指导教师 ______________学期_______________________南京工业大学测绘学院上机守则1.学生必须按指导教师安排的上机实验时间进入机房上机,未经许可,不得带外人进入机房。
2.进入机房时必须穿上鞋套,否则不得进入机房。
3.认真填写上机情况登记表,若遇计算机有异常情况,应先向老师汇报,不得擅自处理。
4.遵守计算机操作规程,即开机时先开显示器再开主机;结束时须关闭计算机,关机时先通过Windows功能关闭系统,主机电源指示灯灭了以后再关闭显示器。
5.禁止上机时玩游戏或从事与上机实验无关的内容。
6.保持机房安静和整洁,不得携带食品、饮料进入机房,严禁随地吐痰、乱扔垃圾或杂物,禁止吸烟、大声喧哗或闲聊。
7.爱护机房设施,严禁更改设置参数、添加口令或删除非本人文件。
对于导致计算机不能正常工作、影响他人上机者,将取消其上机资格。
8.严禁私自拆卸配件或将室内物品带出室外。
一经发现,除要求按价赔偿外,将通报批评和取消其上机资格,情节严重者交有关行政部门和司法部门处理。
上机实验注意事项1、上机实验前必须阅读有关教材及本上机实验指导书,初步了解上机实验内容要求与步骤。
2、严格遵守上机守则,严禁大声喧哗或玩游戏。
3、认真填上机实验记录,不可潦草,填写内容包括上机实验时间、地点、实验主要内容、步骤及完成成果说明等。
4、独立完成上机实验内容,实事求是,严禁抄袭他人作业。
若有弄虚作假现象,该课程成绩按不及格处理。
5、实验结束时,应向指导教师提交上机实验报告和有关成果,符合要求并经允许,方可关机和离开机房。
6、按时上机,不准迟到、早退、旷课,有事须预先履行请假手续,征得指导教师同意后方可离开。
上机实验一、熟悉Visual C#开发环境一、实验目的熟悉Visual C#集成开发环境,了解Visual C#控制台应用程序和窗体应用程序的编写过程。
C 实验多态性实验报告

class Point { public:
Point(int xx,int yy):x(xx),y(yy) {} void display()const; Point &operator++(); Point operator++(int); Point &operator--(); Point operator--(int); private:
using namespace std;
int Double(int x);
long Double(long x);
float Double(float x);
double Double(double x);
int main()
{ int myInt = 6500;
cout<<Double(myInt)<<endl;
学习使用虚函数实现动态多态性。而虚函数就是在基类中被关键字 virtual 说明,
实 并在派生类中重新定义的函数,且在派生类中重工业新定义时,函数原型,包括返回
类型、函数名、参数个数与参数类型的顺序,都必须与基类中的完全相同。此外,构 验
造函数不能是虚函数,但析构函数可以是虚函数。
总
函数的重载方法有一参数个数相同,但是类型不同;二参数个数不同;三 coust
实
验 Visual C++的编译环境下,独立完成实验要求的内容,独立完成编写、编译以及运行
原
的过程
理
实
验 安装了 Visual C++的 PC 机器
仪
器
c语言中多态的定义及实现方式

c语言中多态的定义及实现方式C语言是一种面向过程的编程语言,不支持面向对象编程的特性,如多态、继承和封装等。
但是,我们可以通过一些技巧来实现类似于面向对象编程中的多态性。
在本文中,我们将介绍C语言中多态的定义、实现方式以及举出一些例子。
1.多态的定义多态是面向对象编程中的一个重要概念。
它指的是不同对象对同一消息作出不同响应的能力。
在C语言中,我们可以通过函数指针、结构体和联合体等技术来实现多态性。
下面是多态的定义:多态是指在不同的对象上调用同一方法,而这些对象会根据所属类的不同产生不同的行为。
换句话说,多态是指一个接口,多种实现。
1.多态的实现方式在C语言中,我们可以通过以下方式来实现多态性:2.1 函数指针函数指针是指向函数的指针变量。
我们可以将不同的函数指针赋值给同一个函数指针变量,从而实现多态性。
例如:#include <stdio.h>void add(int a,int b){printf("%d + %d = %d\n", a, b, a + b);}void sub(int a,int b){printf("%d - %d = %d\n", a, b, a - b);}int main(){void(*p)(int,int);int a =10, b =5;p = add;p(a, b);p = sub;p(a, b);return0;}在上面的例子中,我们定义了两个函数add和sub,它们实现了两种不同的行为。
我们定义了一个函数指针p,它可以指向这两个函数。
在不同的情况下,我们将p 指向不同的函数,从而实现了多态性。
2.2 结构体结构体是一种自定义的数据类型,它可以包含多个不同类型的成员。
我们可以通过结构体来实现多态性。
例如:#include <stdio.h>typedef struct Animal{void(*speak)();} Animal;typedef struct Cat{Animal base;} Cat;typedef struct Dog{Animal base;} Dog;void cat_speak(){printf("Meow!\n");}void dog_speak(){printf("Woof!\n");}int main(){Cat cat;Dog dog;cat.base.speak = cat_speak;dog.base.speak = dog_speak;cat.base.speak();dog.base.speak();return0;}在上面的例子中,我们定义了一个Animal结构体和两个派生结构体Cat和Dog。
C++实验五多态性、继承和派生

附录:实验源程序及实验结果(1) 定义一个人员类Person,包括姓名、编号、性别等数据成员和用于输入、输出的成员函数,在此基础上派生出学生类Student类(增加成绩)和教师类Teacher(增加教龄),并实现对学生和教师信息的输入和输出。
//Person.h#include<iostream> //编译预处理命令using namespace std; //使用命名空间std#ifndef PERSON_H#define PERSON_Hclass Person //声明类Person{protected:char name[18]; //姓名int num; //编号char sex[3]; //性别public:char na[18],se[3];int nu;Person(){} //构造函数void Imput() //输入信息{ cout<<"请输入姓名:";cin>>na;cout<<"请输入编号:";cin>>nu;cout<<"请输入性别:";cin>>se; }void Set() //设置信息{ strcpy(name,na);num=nu;strcpy(sex,se); }void Show() const; //显示信息函数定义声明};#endif//Student.h:#include<iostream> //编译预处理命令using namespace std; //使用命名空间std#ifndef STUDENT_H#define STUDENT_Hclass Student:public Person //声明类Student{protected:double record; //成绩public:double re;Student(){} //构造函数void Imput(){cout<<"请输入学生的信息:"<<endl;Person::Imput(); //调用基类成员函数Imput() cout<<"请输入成绩:";cin>>re;}void Set(){ Person::Set(); //调用基类成员函数Set() record=re;}void Show() const;};#endif//Teacher.h:#include<iostream> //编译预处理命令using namespace std; //使用命名空间std#ifndef TEACHER_H#define TEACHER_Hclass Teacher:public Person{protected:int age; //教龄public:int ag;Teacher(){} //构造函数void Imput(){cout<<endl<<"请输入教师的信息:"<<endl;Person::Imput(); //调用基类成员函数Imput() cout<<"请输入教龄:";cin>>ag;}void Set(){Person::Set(); //调用基类成员函数Set()age=ag;}void Show() const;};#endif//Person.cpp:#include"Person.h"void Person::Show() const //显示信息函数定义{cout<<"姓名:"<<name<<endl;cout<<"编号:"<<num<<endl;cout<<"性别:"<<sex<<endl;}//Student.cpp:#include"Person.h"#include"Student.h"void Student::Show() const{cout<<endl<<"学生的信息为:"<<endl;Person::Show(); //调用基类成员函数Show() cout<<"成绩:"<<record<<endl<<endl;}//Teacher.cpp:#include"Person.h"#include"Teacher.h"void Teacher::Show() const{cout<<"教师的信息为:"<<endl;Person::Show(); //调用基类成员函数Show() cout<<"教龄:"<<age<<endl<<endl;}//main.cpp:#include"Person.h"#include"Student.h"#include"Teacher.h"int main(){ Student s; //定义对象ss.Imput(); //输入学生信息s.Set(); //设置学生信息Teacher t; //定义对象tt.Imput(); //输入教师信息t.Set(); //设置教师信息s.Show(); //显示学生信息t.Show(); //显示教师信息system("PAUSE");return 0;}(2) 定义一个抽象类Shape,包含纯虚函数Area()(用来计算面积)和SetShape()(用来重设形状大小)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++实验五多态程序设计
福建工程学院
实验报告
面向对象程序设计(C++)
专业电子信息工程班级1303 座号姓名日期20XX-11-26
实验五多态程序设计
一、实验目的:
理解运算符重载的概念和实质,掌握运算符重载函数的定义方法,掌握运算符重载为类的成员函数的方法。
掌握虚函数的定义方法及其在实现多态性中的应用,理解静态连编和动态链编的区别。
二、实验时间:20XX-11-26 三、实验地点:-- 四、实验内容:
1.已知基类:
class Base{
public : virtual void iam {cout using namespace std; class Base { public: };
class Base1 : public Base { public: };
class Base2 : public Base { public: };
int main {
Base b; Base1 b1; void iam { }
coutiam ; return 0;
2. 编写程序,写一个Shape抽象类,该类有求表面积和体积两个纯虚函数;该类派生出圆柱体Cylinder,球体(Sphere),正方体(Cube),计算圆柱体,球体,正方体的表面积和体积。
要求用抽象类实现。
#include using namespace std; const float PI = ; class Shape { public:
virtual double get_surface =0; virtual double get_volume =0; };
class Cylinder : public Shape { public:
Cylinder(double h,double r) : height(h),radius(r) { }
double get_surface { }
double get_volume { } private:
double height,radius; };
class Sphere : public Shape { public:
Sphere(double r) : radius(r) { }
double get_surface { }
double get_volume { } private:
return /*PI*radius*radius*radius; return 4*PI*radius*radius;
cout using namespace std; const float PI = ; class Shape { public:
virtual double get_surface =0; virtual double get_volume =0; };
class Cylinder : public Shape { public:
Cylinder(double h,double r) : height(h),radius(r) { }
cout using namespace std; class Base { public: };
class Base1 : public Base { public: };
class Base2 : public Base { public: };
int main {
Base b; Base1 b1; void iam { }
coutiam ; return 0;
2. 编写程序,写一个Shape抽象类,该类有求表面积和体积两个纯虚函数;该类派生出圆柱体Cylinder,球体(Sphere),正方体(Cube),计算圆柱体,球体,正方体的表面积和体积。
要求用抽象类实现。
#include using namespace std; const float PI = ; class Shape { public:
virtual double get_surface =0; virtual double get_volume =0; };
class Cylinder : public Shape { public:
Cylinder(double h,double r) : height(h),radius(r) { }
double get_surface { }
double get_volume { } private:
double height,radius; };
class Sphere : public Shape { public:
Sphere(double r) : radius(r) { }
double get_surface { }
double get_volume { } private:
return /*PI*radius*radius*radius; return 4*PI*radius*radius;
cout using namespace std; const float PI = ; class Shape { public:
virtual double get_surface =0; virtual double get_volume =0; };
class Cylinder : public Shape { public:
Cylinder(double h,double r) : height(h),radius(r) { }
cout<<\圆柱的底面半径为:\<<radius<<\圆柱的高为:\<<height<<endl;
double get_surface { }
double get_volume { } private:
double height,radius; };
class Sphere : public Shape { public:
Sphere(double r) : radius(r) { }
double get_surface { }
double get_volume { } private:
double radius; };
class Cube : public Shape { public:
Cube(double l) : length(l) { }
double get_surface { }
double get_volume { }
Cube operator+(const Cube &c) { } private:
double length; };
void display(Cube cc) {
cout<<\相加后正方体的表面积为:\<<_surface()<<endl; cout<<\相加后正方体的体积为:\<<_volume()<<endl;
length += ; return Cube(length);
return length*length*length; return 6*length*length;
cout<<\正方体的边长为:\<<length<<endl; return /*PI*radius*radius*radius; return 4*PI*radius*radius;
cout<<\球的半径为:\<<radius<<endl; return
PI*radius*radius*height;
return 2*PI*radius*radius + 2*PI*radius*height;。