实验四:派生类和继承(一)
大学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. 编写一个函数,用来计算从键盘上输入的整数的阶乘。
java类的继承实验报告

java类的继承实验报告Java类的继承实验报告引言:在面向对象的编程语言中,继承是一种重要的概念。
Java作为一门面向对象的编程语言,也支持类的继承。
本篇实验报告将介绍Java类的继承的基本概念、语法以及实际应用。
一、继承的基本概念继承是指一个类可以派生出另一个类,被派生出的类称为子类,派生出子类的类称为父类。
子类可以继承父类的属性和方法,并且可以在此基础上进行扩展或修改。
继承的关系可以形成类的层次结构,使得代码的复用性和可维护性得到提高。
二、继承的语法在Java中,使用关键字"extends"来实现类的继承关系。
子类通过继承父类来获得父类的属性和方法。
语法格式如下:```javaclass 子类名 extends 父类名 {// 子类的成员变量和方法}```在子类中可以重写父类的方法,以实现自己的逻辑。
使用关键字"super"可以调用父类的构造方法和成员变量。
三、继承的实际应用1. 代码复用继承的一个主要优势是可以实现代码的复用。
子类可以继承父类的属性和方法,避免了重复编写相同的代码。
例如,假设有一个父类"Animal",子类"Dog"和"Cat"可以继承父类的一些通用属性和方法,如"eat()"和"sleep()"。
2. 多态性继承也为多态性的实现提供了基础。
多态性是指一个对象可以根据不同的类型表现出不同的行为。
通过继承,可以将不同的子类对象赋给父类引用,实现对不同子类对象的统一操作。
例如,有一个父类"Shape",子类"Circle"和"Rectangle"可以继承父类的方法"draw()",并在自己的类中实现具体的绘制逻辑。
通过将子类对象赋给父类引用,可以统一调用"draw()"方法,实现对不同形状的绘制。
实验四:派生类和继承(一)

福建农林大学实验报告实验4 派生类和继承(一)一、实验目的和要求(1)掌握派生类的声明与定义方法,进一步理解类的继承的概念,能够定义和使用类的继承关系。
(2)熟悉公有派生和私有派生的访问特性。
二、实验内容和原理1、(1)定义一个基类Animal,该类具有私有整型成员变量age,weight,构造派生类Dog公有继承Animal。
Dog类新增私有成员变量color,新增成员函数SetAge(int n)中直接给age赋值,新增成员函数SetWeight(int m)中直接给weight赋值,查看编译结果,并分析结果。
(2)将类Anima l中的age和weight为公有成员,重做第一步,并分析结果。
(3)将类Animal中的age和weight 为保护成员,重做第一步,并分析结果。
(4)将派生类Dog的继承方式改为私有继承方式和保护继承方式重做以上各小题,并分析结果。
2、程序分析题(写出程序的输出结果,并分析结果)。
三、实验环境1. 硬件:PC机;2. 软件:Windows操作系统、Visual C++ 6.0四、算法描述及实验步骤1、(1):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<"The dog's age is "<<a.SetAge(x)<<endl;cout<<"The dog's age weight is"<<a.SetWeight(y)<<endl; return 0;}(2):#include <iostream.h>class animal{public:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(3):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}(4):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(5):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" T The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}(6):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(7):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}(8):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";return 0;}(9):#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<" Please input dog's age :";cin>>x;cout<<endl;cout<<" Please input dog's weight:";cin>>y;cout<<endl;cout<<" The dog's age is "<<a.SetAge(x)<<endl;cout<<" The dog's age weight is "<<a.SetWeight(y)<<endl; return 0;}2#include<iostream.h>class A{public: A(int i,int j){a=i;b=j;}void move(int x,int y){a+=x;b+=y;}void display(){cout<<"("<<a<<","<<b<<")"<<endl;} private:int a,b;};class B:public A{public: B(int i,int j,int k,int l):A(i,j),x(k),y(l){}void display(){cout<<x<<","<<y<<endl;}void fun1(){move(13,15);}void fun2(){A::display();}void fun3(){display();}private:int x,y;int main(){A aa(2,4);aa.display();B bb(5,6,7,8);bb.fun1();bb.fun2();bb.fun3();bb.A::display();bb.B::display();return 0;}五、调试过程1、调试程序,截图如下:原因分析:在public继承中void display 中的display打错成diaplay。
第5章 派生类与继承

void print();
};
print();
};
//定义一个基类 class person{ protected: char name[10]; int age; char sex; public: //…… }; //定义一个派生类 class employee:public person { protected: char department[20]; float salary; public: //…… };
当类的继承方式为私有继承时,基类的public成员和 protected成员被继承后作为派生类的private成员,派生类 的其他成员可以直接访问它们,但是在类外部通过派生类的 对象无法访问。
基类的private成员在私有派生类中是不可直接访问的, 所以无论是派生类成员还是通过派生类的对象,都无法直接 访问从基类继承来的private成员,但是可以通过基类提供 的public成员函数间接访问。 例5.1一个私有继承的例子
由于派生类继承了基类的成员,派生类的构造 函数需要调用基类的构造函数对其中定义于基 类的数据成员进行初始化。 给基类构造函数传递实际参数是通过向派生类 构造函数传递实际参数以及初始化列表来间接 实现传递的。
5.2.1 派生类构造函数和析构函数的执行顺 序 通常情况下,当创建派生类对象时, 首先执行基类的构造函数,随后再执行 派生类的构造函数; 当撤消派生类对象时,则先执行派生 类的析构函数,随后再执行基类的析构 函数。
例5.3 公有继承的访问规则
表5-3 公有继承的访问规则
基类成员 内部访问 对象访问 Private成员 不可访问 不可访问 public成员 可访问 可访问 protected成员 可访问 不可访问
简述派生类的继承方式

简述派生类的继承方式派生类(子类)的继承方式是面向对象编程中的一种重要的技术。
通过继承,子类可以继承父类的属性和方法,并且还可以额外拥有自己的属性和方法。
在继承中,子类可以选择不同的继承方式,以满足不同的需求和场景。
常见的继承方式有三种:公有继承、私有继承和保护继承。
1. 公有继承:公有继承是最常用的继承方式,也是默认的继承方式。
在公有继承中,子类继承了父类的公有成员和保护成员,但是不继承父类的私有成员。
公有继承的特点是子类可以访问和调用父类的公有成员和保护成员,可以重写父类的方法,并可以添加新的成员。
这种继承方式常用于描述"is-a"关系,即子类是父类的一种特殊情况。
2. 私有继承:私有继承是一种特殊的继承方式,在私有继承中,子类继承了父类所有的成员,包括公有成员、保护成员和私有成员。
但是,子类不能访问和调用父类的任何成员,除非在子类中重新定义相应的方法。
私有继承的特点是子类可以重写父类的方法,并可以添加新的成员,但是不能访问和调用父类的成员。
这种继承方式常用于描述"has-a"关系,即子类具有父类的功能。
3. 保护继承:保护继承是介于公有继承和私有继承之间的一种继承方式。
在保护继承中,子类继承了父类的保护成员和公有成员,但是不能继承父类的私有成员。
子类可以访问和调用父类的保护成员和公有成员,可以重写父类的方法,并可以添加新的成员。
保护继承的特点是子类可以访问和调用父类的保护成员,但是不能访问和调用父类的私有成员。
这种继承方式常用于描述"is-implemented-in-terms-of"关系,即子类使用父类的实现方式。
总之,派生类的继承方式提供了灵活多样的方式来实现代码的复用和扩展。
在选择继承方式时,需要根据具体的需求和场景来选择合适的方式。
公有继承适用于描述"is-a"关系,私有继承适用于描述"has-a"关系,而保护继承适用于描述"is-implemented-in-terms-of"关系。
继承与派生类答案

继承与派生类知识要点1.掌握继承和派生的定义,派生类的定义方法。
(1)掌握继承的两种类型:单继承和多继承。
(2)掌握private,public,protected三种继承方式的特点。
继承方式决定了基类中的成员在派生类中的属性。
三种继承方式的共同点:基类的private成员在派生类中不可见。
区别:对于私有继承,基类的public、protected成员在派生类中作为private成员;对于公有继承,基类的public、protected成员在派生类中访问属性不变;对于保护继承,基类的public、protected成员在派生类中作为protected成员。
(3)掌握派生类中的构造函数和析构函数的使用。
基类的构造函数和析构函数不能继承,所以必要时在派生类中定义自己的构造函数和析构函数。
派生列的构造函数完成基类中新增数据成员和基类数据成员的初始化,基类数据成员的初始化通过基类构造函数来实现。
(4)掌握派生类的同名覆盖规则。
(5)掌握赋值兼容规则。
基类对象可以使用公有派生类对象来代替,包括:派生类对象可以赋值给基类对象;派生类对象可以初始化基类对象的引用;基类类型指针可以指向派生类对象。
2.掌握多重继承的概念、定义方法、多重继承派生类构造函数的执行顺序。
派生类构造函数的执行顺序是先执行所有基类的构造函数(顺序按照定义派生类时指定的各基类顺序),在执行对象成员所在类的构造函数(顺序按照他们在类中的声明顺序),最后执行派生类构造函数体中的内容。
3.掌握虚基类的概念和定义方法。
在多重继承中,如果多条继承路径上有一个公共的基类,则在这些路径的汇合点上的派生类会产生来自不同路径的公共基类的多个拷贝,如果用virtual把公共基类定义成虚基类,则只会保留公共基类的一个拷贝。
典型例题分析与解答例题1:下列对派生类的描述中,()是错误的。
A.一个派生类可以作为另一个派生类的基类B.派生类至少有一个基类C.派生类的成员除了它自己的成员外,还包含了它的基类成员D.派生类中继承的基类成员的访问权限到派生类保持不变答案:D分析:一个派生类可以作为另一个派生类的基类。
继承与派生实验报告

继承与派生实验报告继承与派生实验报告引言:继承与派生是面向对象编程中的重要概念,通过继承,一个类可以派生出子类,从而实现代码的复用和扩展。
本文将通过实验来探讨继承与派生的概念、原理和应用。
实验目的:1. 理解继承与派生的概念和原理;2. 掌握如何在编程语言中实现继承和派生;3. 熟悉继承与派生的应用场景。
实验步骤:1. 创建父类:首先,我们创建一个名为"Animal"的父类,该类具有属性和方法,例如"age"和"eat()"。
2. 创建子类:接下来,我们创建一个名为"Cat"的子类,该类继承自"Animal"类。
在子类中,我们可以重写父类的方法或添加新的方法。
3. 实例化对象:通过实例化父类和子类的对象,我们可以调用它们的方法和访问它们的属性。
4. 测试继承与派生:我们可以通过调用父类和子类的方法,观察它们的行为是否符合预期。
实验结果:在创建父类"Animal"时,我们定义了一个"age"属性和一个"eat()"方法。
在创建子类"Cat"时,我们继承了父类的属性和方法,并添加了一个新的"meow()"方法。
在实例化父类对象时,我们可以通过调用"eat()"方法来模拟动物进食的行为。
而在实例化子类对象时,我们既可以调用从父类继承而来的"eat()"方法,也可以调用子类特有的"meow()"方法来模拟猫咪的叫声。
通过实验,我们发现继承与派生的优势在于代码的复用和扩展。
我们只需在父类中定义一次通用的属性和方法,然后让不同的子类继承父类,即可实现代码的复用。
同时,子类还可以通过重写父类的方法或添加新的方法,实现代码的扩展和个性化。
讨论与应用:继承与派生不仅仅局限于上述的父类和子类关系,它还可以在多层次的继承结构中发挥作用。
实验报告模版

实验4 派生类的实现姓名张识翼班级电信3班学号14132201576一、实验目的通过vc开发环境下派生类和对象的设计与实现,了解单继承和多继承的基本方法,掌握派生类的基本设计和编程方法。
二、实验主要内容1、采用单一继承实现学生和毕业生两个类,设计相关的数据成员和函数,编程测试继承情况。
2、单位员工类(时薪工、计件工、经理、佣金工)设计,其中时薪工每周超过50小时后算加班,加班薪水为原薪水的200%;佣金工每周得到保底薪水,再此基础上按比例从该周内销售额中提成;经理则拿固定的周薪。
3、设计研究生类,该类派生自学生类和教师类。
三、实验程序#include<iostream.h>#include<string.h>class Student // 定义基类vehicle{public: // 公有函数成员Student(int n,char *na,int g):number(n),grade(g){strcpy(name,na);}int getNumber(){return number;}char * getName(){return name;}int getGrade(){return grade;}void display(){cout<<"学号:"<<number<<endl<<"姓名:"<<name<<endl<<"年级:"<<grade<<endl;}private: // 私有数据成员int number; // 学号char name[20]; // 姓名int grade; // 年级};class Graduate:public Student //定义毕业生类{char designSubject[20];public:Graduate(int n,char *na,char * deSub,int g=4):Student(n,na,g){strcpy(designSubject,deSub);}void display(){Student::display();cout<<"设计题目:"<<designSubject<<endl;}};void main() //创建对象{Student li(2,"Li Ming",3);Graduate zhang(3,"Zhang Gang","学生成绩管理系统"); // 显示对象的相关信息li.display(); cout << endl<<"-----------------------------------" <<endl;zhang.display();}#include <iostream.h>#include <string.h>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;}char * getDept(){return m_strDept;}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 Master:public Student, public Teacher{public:Master(char *name,int age,char sex,char *ID,char *Class,char *dept,int salary) :Student(name,age,sex,ID,Class),Teacher(name, age, sex, dept, salary){}void ShowMe(){Student::ShowMe();cout<<" 工作单位:"<<getDept()<<endl;cout<<" 月薪:"<<getSalary()<<endl;}};void main(){ // 定义三个不同类的对象Teacher teacher1("刘馨",38,'m',"计算机系",3800);Student std1("刘丽",20,'f',"03016003","计算机03");Master master("张鑫",25,'f',"003","机械052","机械系",1000);//显示各类人员的属性teacher1.ShowMe();cout<<"--------------------"<<endl;std1.ShowMe();cout<<"--------------------"<<endl; master.ShowMe();}#include<iostream>#include<string.h>using namespace std;class employee //员工类{protected:char name[20]; //员工名字char id[20]; //员工号double salary; //员工薪水public:employee(){};employee(char* emp_name,char* emp_id) //建立员工基本信息{strcpy(name,emp_name);strcpy(id,emp_id);}char* get_name() //获取名字{return name;}char* get_id() //获取职工号{return id;}double get_salary() //应得薪水{return salary;}};class hourlyworker:public employee //时薪工类{protected:int hours;double hourpay;public:hourlyworker(){};hourlyworker(char* hour_name,char* hour_id,int hour,double pay):employee(hour_name,hour_id){hours=hour; hourpay=pay;}char *get_name(){return employee::get_name ();}char *id(){return employee::get_id ();}int get_hours() //获取工作时间{return hours;}double get_hourpay() //获取小时工资{return hourpay;}double get_salary() //时薪工工资计算{if(hours<=50)salary=hourpay*hours;elsesalary=hourpay*50+2*hourpay*(hours-50);return salary;}};class pieceworker:public employee //计件工类{protected:int pieces; //工件数double piecepay; //每个工件赢得的工资public:pieceworker(){};pieceworker(char* piece_name,char* piece_id,int piece,double piece_pay): employee(piece_name,piece_id){pieces=piece; piecepay=piece_pay;}char *get_name(){return employee::get_name ();}char *id(){return employee::get_id ();}int get_pieces() //获取工件数{return pieces;}double get_pay() //每件的工资{return piecepay;double piece_salary() //计件工工资{salary=pieces*piecepay;return salary;}};class manager:public employee{public:manager(char* man_name,char* man_id):employee(man_name,man_id){}char *get_name(){return employee::get_name ();}char *id(){return employee::get_id ();}double manager_salary() //经理工资{return salary=3000;}};class commissionworker:public employee //佣金工类{protected:double basesalary; //保底新书double total; //一周内的销售总额double percent; //提成的额度public:commissionworker(){};commissionworker(char* com_name,char* com_id,double com_basesalary,double com_total,double com_percent): employee(com_name,com_id){basesalary=com_basesalary;total=com_total;percent=com_percent;}char *get_name(){return employee::get_name ();char *id(){return employee::get_id ();}double get_base_pay() //保底薪水{return basesalary;}double get_com_total() //销售总额{return total;}double get_com_percent() //销售额中提成{return percent;}double com_salary() //佣金工的工资{salary=basesalary+total*percent;return salary;}};void main(){cout<<"输出“时薪工”的相关信息:"<<"\n";hourlyworker hworker("John","000001",65,20.5);cout<<" hourlyworker'名字: "<<hworker.get_name ()<<"\n";cout<<" hourlyworker'职工号: "<<hworker.get_id ()<<"\n";cout<<" hourlyworker'工作小时数:"<<hworker.get_hours ()<<"\n";cout<<" hourlyworker'每小时金额:"<<hworker.get_hourpay ()<<"\n";cout<<" hourlyworker'总工资: "<<hworker.get_salary ()<<"\n";cout<<"**********************************************"<<"\n";cout<<"输出“计件工”的相关信息:"<<"\n";pieceworker pworker("Tom","000002",100,25.5);cout<<" pieceworker'名字: "<<pworker.get_name ()<<"\n";cout<<" pieceworker'职工号: "<<pworker.get_id ()<<"\n";cout<<" pieceworker'工件数: "<<pworker.get_pieces ()<<"\n";cout<<" pieceworker'每件的金额:"<<pworker.get_pay ()<<"\n";cout<<" pieceworker'总工资: "<<pworker.piece_salary ()<<"\n";cout<<"**********************************************"<<"\n";cout<<"输出“经理”的相关信息:"<<"\n"; manager manag("Jack","000003");cout<<" manager'名字: "<<manag.get_name ()<<"\n";cout<<" manager'职工号:"<<manag.get_id ()<<"\n";cout<<" manager'总工资:"<<manag.manager_salary ()<<"\n";cout<<"**********************************************"<<"\n";cout<<"输出“佣金工”的相关信息:"<<"\n";commissionworker cworker("Jim","000004",500,234.6,0.01);cout<<" commissionworker'名字: "<<cworker.get_name ()<<"\n";cout<<" commissionworker'职工号: "<<cworker.get_id ()<<"\n";cout<<" commissionworker'保底工资:"<<cworker.get_base_pay ()<<"\n";cout<<" commissionworker'销售额: "<<cworker.get_com_total ()<<"\n";cout<<" commissionworker'提成额度:"<<cworker.get_com_percent ()<<"\n";cout<<" commissionworker'总工资: "<<_salary ()<<"\n";cout<<"**********************************************"<<"\n";}四、实验结果五、实验总结实验四比较贴近生活的实际问题,在我写这些程序时候参考了书上的例子。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
福建农林大学金山学院实验报告系(教研室):信息与机电工程系专业:计算机科学与技术年级:实验课程:面向对象程序设计姓名:学号: 实验室号计算机号 实验时间:指导教师签字:成绩:实验4 派生类和继承(一)一、实验目的和要求(1)掌握派生类的声明与定义方法,进一步理解类的继承的概念,能够定义和使用类的继承关系。
(2)熟悉公有派生和私有派生的访问特性。
二、实验内容和原理1、程序分析题(写出程序的输出结果,并分析结果)。
2、(1)定义一个基类animal,该类具有私有整型成员变量age,weight,构造派生类dog公有继承animal,dog类新增私有成员变量color,新增成员函数SetAge(int n)中直接给age赋值,新增成员函数SetWeight(int m)中直接给weight赋值,查看编译结果,并分析结果。
(2)将类animal中的age和weight为公有成员,重做第一步,并分析结果。
(3)将类animal中的age和weight为保护成员,重做第一步,并分析结果。
(4)将派生类dog的继承方式改为私有继承方式和保护继承方式重做以上各小题,并分析结果。
三、实验环境1. 硬件:PC机;2. 软件:Windows操作系统、Visual C++ 6.0四、算法描述及实验步骤2.1#include <iostream.h>class animal{private:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"请输入这条狗的岁数=";cin>>x;cout<<endl;cout<<"请输入这条狗的体重=";cin>>y;cout<<endl;cout<<"这条狗的岁数是"<<a.SetAge(x)<<endl;cout<<"这条狗的体重是"<<a.SetWeight(y)<<endl;return 0;}2.2----------------------------------------------------------#include <iostream.h>class animal{public:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"请输入这条狗的岁数=";cin>>x;cout<<endl;cout<<"请输入这条狗的体重=";cin>>y;cout<<endl;cout<<"这条狗的岁数是"<<a.SetAge(x)<<endl;cout<<"这条狗的体重是"<<a.SetWeight(y)<<endl;return 0;}2.3----------------------------------------------------------#include <iostream.h>class animal{protected:int age,weight;};class dog:public animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"请输入这条狗的岁数=";cin>>x;cout<<endl;cout<<"请输入这条狗的体重=";cin>>y;cout<<endl;cout<<"这条狗的岁数是"<<a.SetAge(x)<<endl;cout<<"这条狗的体重是"<<a.SetWeight(y)<<endl;return 0;}2.4 ----------------------------------------------------------#include <iostream.h>class animal{private:int age,weight;};class dog:private animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"请输入这条狗的岁数=";cin>>x;cout<<endl;cout<<"请输入这条狗的体重=";cin>>y;cout<<endl;cout<<"这条狗的岁数是"<<a.SetAge(x)<<endl;cout<<"这条狗的体重是"<<a.SetWeight(y)<<endl;return 0;}2.5----------------------------------------------------------#include <iostream.h>class animal{public:int age,weight;};class dog:private animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"请输入这条狗的岁数=";cin>>x;cout<<endl;cout<<"请输入这条狗的体重=";cin>>y;cout<<endl;cout<<"这条狗的岁数是"<<a.SetAge(x)<<endl;cout<<"这条狗的体重是"<<a.SetWeight(y)<<endl;return 0;}2.6----------------------------------------------------------#include <iostream.h>class animal{protected:int age,weight;};class dog:private animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"请输入这条狗的岁数=";cin>>x;cout<<endl;cout<<"请输入这条狗的体重=";cin>>y;cout<<endl;cout<<"这条狗的岁数是"<<a.SetAge(x)<<endl;cout<<"这条狗的体重是"<<a.SetWeight(y)<<endl;return 0;}2.7----------------------------------------------------------#include <iostream.h>class animal{private:int age,weight;};class dog: protected animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"请输入这条狗的岁数=";cin>>x;cout<<endl;cout<<"请输入这条狗的体重=";cin>>y;cout<<endl;cout<<"这条狗的岁数是"<<a.SetAge(x)<<endl;cout<<"这条狗的体重是"<<a.SetWeight(y)<<endl;return 0;}2.8----------------------------------------------------------#include <iostream.h>class animal{public:int age,weight;};class dog: protected animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"请输入这条狗的岁数=";cin>>x;cout<<endl;cout<<"请输入这条狗的体重=";cin>>y;cout<<endl;cout<<"这条狗的岁数是"<<a.SetAge(x)<<endl; cout<<"这条狗的体重是"<<a.SetWeight(y)<<endl; return 0;}2.9#include <iostream.h>class animal{ protected:int age,weight;};class dog: protected animal{private:char color[10];public:int SetAge(int n){age=n;return n;}int SetWeight (int m){weight=m;return m; }};int main(){ int x,y;dog a;cout<<"请输入这条狗的岁数=";cin>>x;cout<<endl;cout<<"请输入这条狗的体重=";cin>>y;cout<<endl;cout<<"这条狗的岁数是"<<a.SetAge(x)<<endl; cout<<"这条狗的体重是"<<a.SetWeight(y)<<endl; return 0;}五、调试过程2.1age weight私有成员不能被继承2.22.32.4age weight私有成员不能被继承2.52.62.7age weight私有成员不能被继承2.82.9六、实验结果1:主函数中A aa(2,4);//创建一个对象aa,并且利用构造函数赋值a=2;b=4aa.display();//输出对象aa中的a和b;B bb(5,6,7,8);//创建一个对象bb,并且给与对象成员赋值://i=5;j=6 k=7 l=8 所以 a=5 y=6 x=7 y=8;bb.fun1();//a=5,b=6 a=5+13=18 b=6+15=21bb.fun2();//输出对象bb中的a和b;18 21bb.fun3();//输出对象bb的x的值;bb.A::display();//输出对象bb中的a和b 18 21bb.B::display();//输出对象bb中的x的值2.2 2.3 2.5 2.6 2.8 2.9的运行结果如下七、总结1.主要熟悉了解继承函数2.了解继承3种方式和类成员的访问控制,。