实验六继承

实验六继承
实验六继承

实验六继承

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace shape

{

publicabstractclass shape

{

publicabstractdouble Area();

}

publicclass Circle:shape//建立Circle的派生类

{

privatedouble r;

publicdouble R

{

get

{

return r;

}

set

{

r = value;

}

}

public Circle(double r)

{

this.r = r;

}

publicoverridedouble Area()

{

return Math.PI * r * r;

}

}

publicclass Rectangle: shape//建立Rectangle的派生类 {

privatedouble a;

publicdouble A

{

get

{

return a;

}

set

{

a = value;

}

}

privatedouble b;

publicdouble B

{

get

{

return b;

}

set

{

b = value;

}

}

public Rectangle(double a,double b)

{

this.a = a;

this.b = b;

}

publicoverridedouble Area()

{

return a * b;

}

}

class Program

{

staticvoid Main(string[] args)

{

Console.WriteLine("请输入圆的半径:");

double r = double.Parse(Console.ReadLine()); shape s = new Circle(r);

Console.WriteLine("圆的面积是:{0}",s.Area()); Console.WriteLine("请输入矩形的长和宽:"); double a = double.Parse(Console.ReadLine()); double b = double.Parse(Console.ReadLine()); shape f = new Rectangle(a, b);

Console.WriteLine("矩形的面积是:{0}",f.Area()); Console.ReadLine();

}

}

}

using System;

using System.Collections.Generic; using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace SchoolManagement

{

publicclass User

{

privatestring userName; publicstring Name

{

get

{

return userName;

}

set

{

userName = value; }

}

privatestring password; publicstring Password

{

get

{

return password;

}

set

{

password = value;

}

}

privatestring userType;

publicstring Usertype

{

get

{

return userType;

}

set

{

userType = value;

}

}

publicvoid Login()

{

if (userName.Equals("1")&&password.Equals("1")) {

DisplayPersonInfo();

}

}

publicvirtualvoid DisplayPersonInfo()

{

Console.WriteLine("姓名:{0}",userName); Console.WriteLine("用户类型:{0}",userType);

}

publicclass Student : User

{

privatestring classID;

publicstring ClassID

{

get

{

return classID;

}

set

{

classID = value;

}

}

privatefloat stuScore;

publicfloat StuScore

{

get

{

return stuScore;

}

set

{

stuScore = value;

}

}

public Student()

{

userType = "学生";

}

publicoverridevoid DisplayPersonInfo()

{

base.DisplayPersonInfo();

Console.WriteLine("班级:{0}", classID);

}

publicvoid CheckScore()

{

Console.WriteLine("成绩:{0}", this.stuScore); }

}

}

publicclass Teacher : User

{

privatestring department; publicstring Department

{

get

{

return department;

}

set

{

department = value;

}

}

privatefloat salary;

publicfloat Salary

{

get

{

return salary;

}

set

{

salary = value;

}

}

public Teacher()

{

Usertype = "教师";

}

publicoverridevoid DisplayPersonInfo()

{

base.DisplayPersonInfo();

Console.WriteLine("部门:" + this.department); }

publicvoid checkSalary()

{

Console.WriteLine("工资:" + this.salary);

}

publicclass SysManager : User

{

public SysManager()

{

Usertype= "管理员";

}

public Student InsertStudent()

{

Student stu= new Student();

Console.Write("请输入人员类型");

string Usertype = Console.ReadLine(); Console.Write("请输入学生姓名");

string stuname = Console.ReadLine(); Console.Write("请输入学生ID");

string ClassID = Console.ReadLine();

https://www.360docs.net/doc/529411046.html, = stuname;

stu.ClassID = ClassID;

stu.StuScore = 70;

return stu;

}

public Teacher InsertTeacher()

{

Teacher teacher = new Teacher();

Console.Write("请输入教师姓名");

string teachname = Console.ReadLine();

Console.Write("请输入教师所属学院");

string Department = Console.ReadLine();

https://www.360docs.net/doc/529411046.html, = teachname;

teacher.Department = Department;

teacher.Salary = 5000;

return teacher;

}

}

}

class Program

{

staticvoid Main(string[] args)

{

Teacher.SysManager sys = new Teacher.SysManager();

https://www.360docs.net/doc/529411046.html, = "1";

sys.Password = "1";

sys.Login();

Console.WriteLine("------------------------------"); Teacher teacher = sys.InsertTeacher();

User.Student stu = sys.InsertStudent();

teacher.DisplayPersonInfo();

teacher.checkSalary();

Console.WriteLine("------------------------------"); stu.DisplayPersonInfo();

stu.CheckScore();

Console.WriteLine("------------------------------"); }

}

}

实验七多态

上述过程实现的是动态联编,只有当程序运行时,才知道结果。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace transportation

{

publicclass Plane:Tool

{

public Plane()

{

ToolType = "plane";

}

publicoverridevoid Select()

{

Console.WriteLine("选择的交通工具:飞机。"); }

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace transportation

{

publicclass Car :Tool

{

public Car()

{

ToolType = "car";

}

publicoverridevoid Select()

{

Console.WriteLine("选择的交通工具:汽车"); }

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace transportation

{

publicclass Train:Tool

{

public Train()

{

ToolType = "train";

}

publicoverridevoid Select()

{

Console.WriteLine("选择的交通工具:火车"); }

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace transportation

{

publicabstractclass Tool

{

privatestring toolType;

publicstring ToolType

get

{

return toolType;

}

set

{

toolType = value;

}

}

publicabstractvoid Select();

}

enum toolType

{

car,

train,

plane

}

class Program

{

staticvoid Main(string[] args)

{

Random rnd = new Random();

Tool tool = null;

toolType type = (toolType)rnd.Next(3); switch(type)

{

case toolType.car:

tool = new Car(); break;

case toolType.train:

tool = new Train(); break;

case toolType.plane:

tool = new Plane(); break;

}

if (tool != null)

tool.Select(); Console.ReadLine();

}

}

}

using System;

using System.Collections.Generic; using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Game

{

class Program

{

staticvoid Main(string[] args)

{

Monster player = new Human();

https://www.360docs.net/doc/529411046.html, = "天一"; player.HP = 3000;

player.MP = 1500;

player.Accuracy = 80; player.Attack = 300; player.Defense = 100; player.Dodge = 50;

player.DoAttack();

player.DoStand();

player.DisplayInfo(); }

}

}

using System;

using System.Collections.Generic; using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Game

{

publicinterface Monster

{

string Name

{

get;

set;

}

int HP

get;

set;

}

int MP

{

get;

set;

}

int Defense

{

get;

set;

}

int Attack

{

get;

set;

}

int Dodge

{

get;

set;

}

int Accuracy

{

get;

set;

}

void DoAttack();

void DoStand();

void DoDefense();

void DisplayInfo();

}

}

using System;

using System.Collections.Generic; using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Game

{

publicclass Repeat

{

privateint healthPower; privateint magicPower; privateint defense; privateint attack;

privateint dodge;

privateint accuracy; privatestring name;

publicint HP

{

get { return healthPower; } set { healthPower = value; } }

publicint MP

{

get { return magicPower; } set { magicPower = value; } }

publicint Defense

{

get { return defense; }

set { defense = value; }

}

publicint Attack

{

get { return attack; }

set { attack = value; }

}

publicint Dodge

{

get { return dodge; }

set { dodge = value; }

}

publicint Accuracy

{

get { return accuracy; }

set { accuracy = value; }

}

publicstring Name

{

get { return name; }

set { name = value; }

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Game

{

publicclass Beast : Repeat, Monster

{

publicvoid DoAttack()

{

Console.WriteLine(Name + "的爪子狠狠的一抓,你的头皮去了好大一块!"); }

publicvoid DoStand()

{

Console.WriteLine(Name + "四脚着地,目露凶光,你看到它时不寒而栗!"); }

publicvoid DoDefense()

{

Console.WriteLine(Name + "向你大声咆哮,吓得你抱头鼠窜。");

}

publicvoid DisplayInfo()

{

Console.WriteLine("姓名:" + Name);

Console.WriteLine("种族:四足兽类");

Console.WriteLine("-------------------------------------"); Console.WriteLine("状态");

Console.WriteLine("生命:{0}\t\t魔法:{1}", HP, MP);

Console.WriteLine("-------------------------------------"); Console.WriteLine("战斗力");

Console.WriteLine("攻击:{0}\t\t防御:{1}", Attack, Defense); Console.WriteLine("命中:{0}\t\t\t闪避:{1}", Accuracy, Dodge);

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Game

{

class Human : Repeat, Monster

{

publicvoid DoAttack()

{

Console.WriteLine(Name + "的攻击动作很华丽!===!=========>");

}

publicvoid DoStand()

{

Console.WriteLine(Name + "站在那里,果然是伟岸英挺,气宇轩昂,简直是人中龙凤!"); }

publicvoid DoDefense()

{

Console.WriteLine(Name + "将手中兵器舞成一片,格开了所有人的进攻。");

}

publicvoid DisplayInfo()

{

Console.WriteLine("姓名:" + Name);

Console.WriteLine("种族:人类");

Console.WriteLine("-------------------------------------");

Console.WriteLine("状态");

Console.WriteLine("生命:{0}\t\t魔法:{1}", HP, MP);

Console.WriteLine("-------------------------------------");

Console.WriteLine("战斗力");

Console.WriteLine("攻击:{0}\t\t防御:{1}", Attack, Defense);

Console.WriteLine("命中:{0}\t\t\t闪避:{1}", Accuracy, Dodge);

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Teris

{

enum ShapeType

{

Block = 0,

L,

T,

Z,

}

class Program

{

staticvoid Main(string[] args)

{

Random rnd = new Random();

while (true)

{

Shape shape = null;

ShapeType type = (ShapeType)rnd.Next(4);

switch (type)

{

case ShapeType.Block:

shape = new ShapeBlock();

break;

case ShapeType.L:

shape = new ShapeL();

break;

case ShapeType.T:

shape = new ShapeT();

break;

case ShapeType.Z:

shape = new ShapeZ();

break;

}

if (shape != null)

{

shape.DisplayInfo();

shape.Draw();

Console.WriteLine("-------------------------");

System.Threading.Thread.Sleep(1000); }

}

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Teris

{

publicinterface Shape

{

string ShapeType

{

get;

set;

}

void DisplayInfo();

void Draw();

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Teris

{

publicclass ShapeBlock:Shape

{

privatestring shapeType;

publicstring ShapeType

{

get { return shapeType; }

set { shapeType = value; }

}

public ShapeBlock()

{

ShapeType = "田形";

}

publicvoid DisplayInfo()

{

Console.WriteLine("当前图形类型" + shapeType); }

publicvoid Draw()

{

Console.WriteLine("_________");

Console.WriteLine("| | |");

Console.WriteLine("| | |");

Console.WriteLine("_________");

Console.WriteLine("| | |");

Console.WriteLine("| | |");

Console.WriteLine("_________");

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Teris

{

publicclass ShapeL:Shape

{

privatestring shapeType;

publicstring ShapeType

{

get { return shapeType; }

set { shapeType = value; }

}

public ShapeL()

{

ShapeType = "L形";

}

publicvoid DisplayInfo()

{

Console.WriteLine("当前图形类型" + shapeType); }

publicvoid Draw()

{

Console.WriteLine("|");

Console.WriteLine("|");

Console.Write("|");

Console.WriteLine("__");

}

}

}

java继承与接口实验三

信息与计算科学专业实验报告 课程名称Java课程设计总实验学时: 16 第3 次共6 次 实验项目名称继承与接口本次实验学时数: 3 实验类 型 验证 日期20 12 年 3 月6 日星期二年级 学生姓名学号课任教师 1.实验目的 巩固如下概念:子类的继承性、子类对象的创建过程、成员变量的继承与隐藏、方法的继承与重写;掌握上转型对象的使用;掌握接口回调技术。 2.实验要求 实验前,应事先熟悉相关知识点,拟出相应的实验操作步骤,明确实验目的和要求;实验过程中,服从实验指导教师安排,遵守实验室的各项规章制度,爱护实验仪器设备;实验操作完成后,认真书写实验报告,总结实验经验,分析实验过程中出现的问题。 3.实验内容 1、继承 编写一个Java应用程序,除主类外,该程序中还有4个类:People、ChinaPeople、AmericanPeople和BeijingPeople类。要求如下:People类有访问权限是protected的double 型成员变量:height和weight,以及public void speakHello()、public void averageHeight()、public void averageWeight()方法;ChinaPeople类是People的子类,新增了public void chinaGongfu()方法。要求ChinaPeople重写父类的public void speakHello()、public void averageHeight()、public void averageWeight()方法;AmericanPeople类是People的子类,新增public void americanBoxing()方法。要求AmericanPeople重写父类的public void speakHello()、public void averageHeight()、public void averageWeight()方法;BeijingPeople类是ChinaPeople的子类,新增public void beijingOpera()方法。要求BeijingPeople重写父类的public void speakHello()、public void averageHeight()、public void averageWeight()方法;请按模板要求,将【代码】替换为Java程序代码。 2、上转型对象 编写一个Java应用程序,要求有一个abstract类,类名为Employee。Employee的子类有YearWorker、MonthWorker和WeekWorker。YearWorker对象按年领取薪水,MonthWorker按月领取薪水,WeekWorker按周领取薪水。Employee类有一个abstract方法:public abstract double earnings(); 子类必须重写父类的earnings()方法,给出各自领取报酬的具体方式。有一个

继承和派生实验报告

实验目的与要求: 1.掌握类的继承与派生关系以及实验方法,理解类的层次结构。 2.掌握派生类构造函数初始化基类成员和对象成员的方法。 3.掌握内联函数和默认函数。 4.掌握赋值兼容原则,掌握派生类的复制构造函数和赋值运算符的定义。 实验过程及内容: 1.实践教程实验二十二P81范例:定义一个继承与派生关系的类体系,在 派生类中访问基类成员。 ①先定义一个点类,包含x,y坐标数据成员,显示函数和计算面积的函数成员; ②以点为基类派生一个圆类,增加表示半径的数据成员,重载显示和计算面积的函数; ③定义一个线段类,以两个点类对象作数据成员,定义显示、求面积及长度函数,线段类采用聚合方式,因为有两个端点,不能用派生。 编程测试所定义的类体系。 本实验教程中有源码,请自行运行,体会和熟悉继承与派生的基本概念及实现方法,掌握派生类构造函数初始化基类成员和对象成员的方法等。2. 实践教程P83编程:多层派生练习,由上题Point类和Circle类继续派生出Cylinder类。要求计算圆柱的底面积、侧面积、全面积和体积。 请编写所有完整的成员函数,并编写主函数进行验证。 数据处理 1. (1)

(2)j结果报错,原因是派生类中的成员函数不能访问基类中的私有成员。(3)在Line类中添加两个数据成员。

2. #include #include using namespace std; #define PI 3.14159 class Point{ friend class Line; protected: double x, y ; public: Point(){x = 0 ; y = 0 ; } Point(double xv,double yv){ x = xv; y = yv; } double Area(){return 0;} void Show() { cout<<"x="<

注意派生类的构造函数中对基类数据成员的初始化方法(即 Circle(double xv,double yv,double vv):Point(xv,yv)), 以及构造函数中对对象成员的初始化方法(即 Line(double xv1,double yv1,double xv2,double yv2) : start(xv1,yv1),end(xv2,yv2){ } ) 【要求】 (1)建立工程,录入上述程序,改变数据实验之。 (2)修改Point 类的数据成员x ,y 的访问权限为private ,再运行,结果如何? (3)如果不将Line 类设为 Point 类的友元,应采取什么措施?为哪个类增加数据或函数成员? 2.编程:多层派生练习,由上题Point 类和Circle 类继续派生出Cylinder 类。要求计算圆柱体的底面积、侧面积、全面积和体积。

实验04 类的继承与多态

实验四类的继承与多态 一、实验目的 1.掌握构造方法和成员方法重载的应用。 2.理解类的继承性的作用 3.领会面向对象编程的多态性。 二、实验内容与要求 基本概念 1.进一步理解继承的含义 新类可从现有的类中产生,并保留现有类的成员变量和方法并可根据需要对它们加以修改。新类还可添加新的变量和方法。这种现象就称为类的继承。 当建立一个新类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。被继承的类称为父类或超类(superclass),这个新类称为子类。 Java 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少 有某个类恰恰满足你的需要。你必须设计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。 2.了解成员变量的隐藏方式 所谓隐藏是指子类重新定义了父类中的同名变量,在子类L ine 中重新定义了x为x1,y 为y1,隐藏了父类Point 中的两个成员变量x 和y。子类执行自己的方法时,操作的是子类的变量,子类执行父类的方法时,操作的是父类的变量。在子类中要特别注意成员变量的命名,防止无意中隐藏了父类的关键成员变量,这有可能给程序带来麻烦。 3.了解成员方法的覆盖方式 (1)方法覆盖的定义与作用通过继承子类可以继承父类中所有可以被子类访问的成员方法,但如果子类的方法与父类方法同名,则不能继承,此时称子类的方法覆盖了父类的方法,简称为方法覆盖(override)。方法覆盖为子类提供了修改父类成员方法的能力。 4.理解类的多态性类的继承发生在多个类之间,而类的多态只发生在同一个类上。在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。这种现象称为类的多态。多态使程序简洁,为程序员带来很大便利。在O OP 中,当程序要实现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。 类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。 实践应用

JAVA类的继承实验报告

《面向对象程序设计》实验报告 实验六、类的继承 课程代码:1H10500学分:6 实验类型:实践型实验学时:4个学时 实验时间:2017.11.23 实验地点:5407 班级:计算机164 专业:计算机科学与技术专业学号:2016011147 姓名:林文辉 一、实验目的 (1)学习JAVA继承的思想 (2)了解JAVA语言继承的实现 二、实验内容及步骤 内容:在圆柱体类Cylinder里,用一个构造方法调用另一个构造方法 步骤:方案的设计与分析(类结构图。。。。。。) (1)找出对象的共同属性和行为 (2)设计代表共同状态与行为的类 (3)决定子类是否需要让某项行为有特定的不同的运行方式 (4)寻找更多抽象化的机会 (5)完成类的继承层次 三、实验过程及结果 实验1代码: abstract class Graphics { abstract void parameter(); abstract void area(); } class Rectangle extends Graphics{ double h,w; Rectangle(double u,double v){h=u;w=v;} void parameter() { S ystem.out.println("矩形高度为:"+h+",矩形宽度为:"+w); } void area() { S ystem.out.println("矩形面积为:"+(h*w)); } }

class Circle extends Graphics{ double r; String c; Circle(double u,String v){r=u;c=v;} void parameter() { System.out.println("圆半径为:"+r+",圆颜色为:"+c); } void area() { System.out.println("圆面积为:"+(Math.PI*r*r)); } } class ExamAbs{ public static void main(String args[]) { Rectangle rec=new Rectangle(2.0, 3.0); Circle cir=new Circle(4.0, "Red"); Graphics[]g= {rec,cir}; for(int i=0;i

面向对象--类继承与接口实验报告

实验十类继承与接口(二) 课程名称:面向对象程序设计 实验项目名称:实验十类继承与接口(二) 学生姓名:专业:学号: 实验地点:实验日期:年月 【实验目的】 1.掌握Java类的继承特点,包括子类声明、对象创建 2. 掌握域的继承与隐藏的特点和用法 3. 掌握方法的继承与重写的特点和用法 【实验内容】 一. 改错题 检查下面代码是否有错,如果有错,写明错误原因,并修正错误。 (1) class Aaa{ int i; Aaa(){i=-1; } Aaa(int a){ i = a;} Aaa(double d){Aaa((int)d);} } 是否出错:是 出错原因(如果出错):构造器调用构造器不能直接用名 class Aaa{ int i; Aaa(){i=-1; } Aaa(int a){ i = a;} Aaa(double d){this((int)d);} }

(2) class Aaa{ int i; Aaa(){i=-1; } Aaa(int a){ i = a;} Aaa(double a){int b=(int)a;this(b);} } 是否出错:是 出错原因(如果出错):this放第一行 class Aaa{ int i; Aaa(){i=-1; } Aaa(int a){ i = a;} Aaa(double a){this((int)a);} } (3) class Aaa{ int i; Aaa(int a){ i = a;} } class Bbb extends Aaa{ Bbb(){ } } 是否出错:是 出错原因(如果出错):父类没有无参构造,子类中药通过super调用父类构造class Aaa{ int i; Aaa(int a){ i = a;} } class Bbb extends Aaa{ Bbb(int a) { super(a); } } (4) class Aaa{ private int i;

实验6-继承与派生(1)

实验六继承与派生(1) 1.1 实验目的 (1)理解继承的含义以及声明; (2)理解共有派生、私有派生和保护派生的含义以及使用; (3)理解单派生类中构造函数和析构函数的调用顺序。 1.2 实验内容 1、定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类具有以下特点: (1)CLine类含有计算直线长度和斜率的成员函数; (2)CCircle类含有计算圆面积的成员函数。 2、程序阅读。 (1)以下程序有两大错误,请修改程序,写出程序运行结果并分析。 #include using namespace std; class CBase { public: CBase(int a):a(a) {} protected: void print() { cout<<"a="<

public: void print() { CBase::print(); cout<<"b="< using namespace std; class CBase {public: CBase(int a):a(a) {cout<<"base structure"<

实验六 类与对象、继承

实验六类与对象(三) 一、实验目的和要求 1.掌握对象成员的使用 2.掌握友元函数的使用。 3.掌握静态数据成员和静态成员函数的用法。 二、实验内容 1.定义学生类Student,Time类,Date类,要求:学生属性包括学号,姓名,成绩,出生日期、出生时间等; (1)创建学生对象Student stuz(“1009001”,”张丽丽”,80,1993,10,20,12,30,20); 打印输出:张丽丽出生于1993年10月20号12点30分20秒。 (2)创建学生对象Student stuw(“1009002”,”王珊珊”,89,1995,11,20,10,38,27) 打印输出其信息,并输出目前程序中多少个学生对象。 2、定义矩阵类,它能够在运行时构造任意行数和列数的矩阵,实现矩阵的加减运算; 3、教师工资计算 (1)新建一个雇员类,它的数据成员有雇员代号,年龄,工资,性别,姓名,输入雇员资料方法,打印雇员资料方法。 (2)以此雇员类为基类,从中派生出教师类,其中要求在教师类中加入一个计算教师工资的方法和教师的所教课程属性,教师工资=基本工资(1000)+课时(月工作量)×30。(3).以此雇员类为基类,从中派生出实验员类,其中要求在实验员类中加入一个计算实验员工资的方法和所管理实验室的个数属性,实验员工资=基本工资(800)+实验室补助(150)+值班时间(月工作量)×5。 (4)以此雇员类为基类,从中派生出行政人员类,其中要求在行政人员类中加入一个计算行政人员工资的方法和其行政职务的属性,行政人员工资=基本工资(900)+行政补贴(200)。 (5)定义教师对象teacher1(”01234”,20,3000,’f’,”张三丰”,”数学”);打印其信息;。 .定义实验员对象experiment1(”13324”,23,2000,’m’,”张远远”,4);打印其信息; .定义行政人员对象teacherone(”1323”,33,2000,’m’,”李阳”,“科长”);打印其信息;

实验11-类继承与接口(三)实验报告

浙江大学城市学院实验报告 课程名称:面向对象程序设计 实验项目名称:类继承与接口(三) 学生姓名专业:学号: 实验地点:实验日期:年月日 【实验目的】 1.巩固Java类继承的相关知识 2.理解对象上转型技术的优点和用途。 3.掌握接口的特点 4.接口与抽象类的异同之处 【实验内容】 一、类继承相关知识强化 1. 执行以下程序,给出执行Bbb的结果,并说明指出类Bbb的this.i与super.i的含义(即它们都对应哪个变量)。 class Aaa{ int i; Aaa(int a){ i = a;} } class Bbb extends Aaa{ int j,k; Bbb(int i){ super(i); j = this.i; k = super.i; } public static void main(String[] args){ Bbb b = new Bbb(18); System.out.println(b.j +"\t" + b.k); } } 执行Bbb的结果:

this.i与super.i的含义(即它们都对应哪个类中定义的变量): 都对应Aaa类中的变量。 2.接着上面例子,将类Bbb改写为以下代码,请写出程序运行结果,并说明这个例子与上面例子的区别。 class Bbb extends Aaa{ int i= -1,j= -1,k= -1; //比上面例子增加一个实例变量i; Bbb(int i){ super(i); j = this.i; //本语句含义是:Bbb类中的变量i的值赋给j k = super.i; //本语句含义是:访问Aaa类中的变量i并将值赋给k } public static void main(String[] args){ Bbb b = new Bbb(18); System.out.println(b.j +"\t" + b.k); } } 执行Bbb的结果: -1 18 这个例子与上面例子的区别: 在Bbb类中也定义了变量i,将Bbb的直接超类Aaa中的变量i给覆盖掉了。 3.对以下程序,给出执行Bbb的结果,并分析Bbb中main方法中a.show(1), b.show(1), c.show(1)的结果。 class Aaa{ void show(){ System.out.println("Aaa中定义的show()"); } void show(int i){ System.out.println("Aaa中定义的show(int i)"); } } class Bbb extends Aaa{ void show(){ System.out.println("Bbb中定义的show()"); }

C++语言程序设计实验答案_继承与派生教学提纲

C++语言程序设计实验答案_继承与派生

实验07 继承与派生(4学时) (第7章继承与派生) 一、实验目的 二、实验任务 7_1 声明一个基类Animal。 有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。 7_2 声明一个基类BaseClass。 有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。 7_3 声明一个车(vehicle)基类。 具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。

7_4 以实验6中的People(人员)类为基类。 派生出student(学生)类,添加属性:班号char classNo[7]; 派生出teacher(教师)类,添加属性:职务char principalship[11]、部门char department[21]。 从student类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser; 从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。重载相应的成员函数,测试这些类。 类之间的关系如图7-1所示。 图7-1 类图

实验四 多态性

实验四多态性 一、实验目的 1、掌握运算符重载的基本方法。 2、掌握友元运算符函数和成员运算符函数的使用方法及两者之间的不同。 3、学习虚函数的定义与使用方法。 4、了解静态多态性和动态多态性。 5、学习使用虚函数和继承实现动态多态性。 二、试验内容 1、编写一个程序,要求: (1)生明一个类Complex(复数类),定义类Complex的两个对象c1和c2,对象c1通过构造函数直接指定复数的实部和虚部(类私有数据成员为double类型:real和imag)为2.5及3.7,对象c2通过构造函数直接指定复数的实部和虚部为4.2及6.5; (2)定义友元运算符重载函数,它以c1、c2对象为参数,调用该函数时能返回两个复数对象相加操作; (3)定义成员函数print,调用该函数时,以格式“real+imag i”输出当前对象的实部和虚部,例如:对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:4.2+6.5 i; (4)编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。 #include class complex{ private: double real; double imag; public: complex(double r=0.0,double i=0.0); void print(); friend complex operator+(complex &a,complex &b); };

complex::complex(double r,double i) { real=r; imag=i; } complex operator+(complex &a,complex &b) {complex temp; temp.imag=a.imag+b.imag; temp.real=a.real+b.real; return temp; } void complex::print() { cout<

Java继承与多态实验报告

西安邮电大学 (计算机学院) 课内实验报告 实验名称:继承与多态 专业名称:计算机科学与技术 班级:计科1405班 学生姓名:高宏伟 学号:04141152 指导教师:刘霞林 实验日期:2016.10.13

一、实验目的 通过编程和上机实验理解Java 语言的继承和多态特性,掌握变量的隐藏、方法的覆盖、重载,掌握抽象类和接口的使用。 二、实验要求 1.编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序。 2.编写体现类的多态性(成员方法重载)的程序。 3.编写体现类的多态性(构造方法重载)的程序。 4.编写使用接口的程序。 三、实验内容 (一)类的继承 1.创建公共类Student. (1)编写程序文件Student.java,源代码如下: public class Student { protected String name; //具有保护修饰符的成员变量 protected int number; void setData(String m,int h) //设置数据的方法 { name =m; number= h; } public void print() //输出数据的方法 { System.out.println(name+", "+number); } } (2)编译Student.java,产生类文件Student.class。 2.创建继承的类Undergraduate

(1)程序功能:通过Student 类产生子类undergraduate,其不仅具有父类的成员变量name()、number(学号),还定义了新成员变量academy(学院)、department (系)。在程序中调用父类的print 方法。 (2)编写Undergraduate 程序: class Undergraduate extends Student { 【代码1】//定义成员变量academy 【代码2】//定义成员变量department public static void main(String args[]) { 【代码3】//创建一个学生对象s 【代码4】//用父类的setData方法初始化对象s 【代码5】//对象s调用print方法 【代码6】//创建一个大学生对象u 【代码7】//调用父类的成员方法setData初始化对象u 【代码8】//设置对象u的成员变量academy 【代码9】//设置对象u的成员变量department System.out.print(https://www.360docs.net/doc/529411046.html,+", "+u.number+", "+u.academy+", "+u.department); } } (3)编译并运行程序 注意:公共类Student 与undergraduate 类要在同一文件夹(路径)。 (二)方法的重载 (1)程序功能:对不同的数进行排序输出。在IntSort 类中定义3 个同名的方法sort。 (2)编写Sort.java 文件,源代码如下。 import java.awt.Graphics; import java.applet.Applet; class IntSort { public String sort(int a, int b) { if (a>b) return a+""+b; else return b+""+a; } public String sort(int a, int b, int c) { int swap; if (a

实验六继承与派生

继承与组合 一、实验目的 1.了解继承在面向对象程序设计中的重要作用。 2.进一步理解继承与派生的概念。 3.掌握通过继承派生出一个新的类的方法。 4.了解虚基类的作用和用法。 5.掌握类的组合 二、实验内容 1.请先阅读下面的程序,写出程序运行的结果,然后再上机运行程序,验证自己分析的结果是否正确。 (1) #include using namespace std; class A {public: A(){cout<<"A::A() called.\n";} virtual ~A(){cout<<"A::~A() called.\n";} }; class B:public A {public: B(int i) { cout<<"B::B() called.\n";

buf=new char[i]; } virtual ~B() { delete []buf; cout<<"B::~B() called.\n"; } private: char *buf; }; void fun(A *a) { cout<<"May you succeed!"<

A::A() called. B::B() called. May you succeed! B::~B() called. A::~A() called. (2) #include using namespace std; class A{ public: A(int a,int b):x(a),y(b){ cout<<"A constructor..."<

实验2 类的封装性和继承性设计实验

实验2 类的封装性和继承性设计实验 一、实验目的 理解面向对象封装性、继承性和多态性的基本概念,掌握声明类、封装类、继承类以及运行时多态性的实现方法。 二、实验内容 1.程序理解: 1)设计复数类

2)在构造方法中使用this 3)Static 关键字的使用:

2.编程题: (1) 请按照以下要求设计一个Student类,并进行测试。 要求如下: 1)Student类中包含姓名、成绩两个属性。 2)分别给这两个属性定义两个方法,一个方法用于设置值,另一个方 法用于获取值。 3)Student类中定义一个无参的构造方法和一个接受两个参数的构造 方法,两个参数分别为姓名和成绩属性赋值。 4)在测试类中创建两个Student对象,一个使用无参构造方法,然 后调用方法给姓名和成绩赋值,另一个使用有参的构造方法,在构造 方法中给姓名和成绩赋值。 (提示:注意成员变量和成员方法的访问权限设置,使用this解决成 员变量与局部变量名称冲突的问题) (2) 1) 设计一个类,设计它的一个无参数构造方法,构造方法中打印一条消息。main方法创建这个类的一个对象,观察打印结果。 2) 在练习1)的基础上增加一个重载的构造方法,采用一个String 参数,并在构造方法中把这个String消息打印出来。创建这个类的 对象,观察打印结果。 3) 以练习2)创建的类为基础上,创建属于它的实例对象的一个数组, 但不要实际创建对象并分配到数组里。运行程序时,注意是否打印出 来自构建方法调用的初始化消息?为数组中每个变量创建对象,观察 打印结果? (3) 请按照以下要求设计一个Outer类。 要求如下: 1)定义一个外部类Outer,并在该类中定义一个静态内部类Inner。

实验二 继承与接口实验

实验二继承与接口 一、实验目的 1.掌握类的继承机制。 2.熟悉类中成员变量和方法的访问控制。 3.掌握接口与包的使用,熟悉方法的多态性。 二、实验内容 1.定义父类及子类,在子类中重写父类的方法 2.练习接口与包的使用 三、.实验步骤与要求 第1题继承 编写一个Java应用程序,除了主类外,该程序中还有4个类:People, ChinaPeople, AmericanPeople 和BeijingPeople类。此四个类的继承关系如下图所示: 要求ChinaPeople,American类均重写其父类People类的speakHello, averageHeight, averageWeight方法,BeijingPeople类重写其父类ChinaPeople类的speakHello, averageHeight, averageWeight方法。 源代码: package people; class people { protected double height ; protected double weight ;

public void speakHello() //问候语的函数 { System.out.println("hello"); } public void averageHeight()//人们的平均身高{ height=170; System.out.println(+height); } public void averageWeight()//人们的平均体重{ weight=120; System.out.println(+weight); } } class Chinapeople extends people { public void speakHello() { System.out.println("你好"); } public void averageHeight() { height=172; System.out.println(+height); } public void averageWeight() { weight=115; System.out.println(+weight); } public void chinaGongfu()//中国功夫的方法 { System.out.println("中国功夫"); } } class Americanpeople extends people { public void speakHello() { System.out.println("hello"); } public void averageHeight()

实验6 继承与派生

实验6 继承与派生 专业:计算机科学与技术班级:10计本1班学号:姓名: 实验地点:B102实验时间:2011/11/23 指导教师:李佐勇 一、实验目的 1.理解继承与派生、单继承与多继承的概念; 2.理解基类与派生类的定义及使用方法,派生类对象的定义与初始化方法; 3.理解继承与派生过程中,把派生类作为基类构成类族的概念及虚基类的概念。 二、实验环境 一台PC机,Windows XP操作系统,V isual C++ 6.0开发环境。 三、实验内容 1、由在校人员类(Person)作为基类派生出学生类(Student): 在校人员类有数据成员:编号(ID)、姓名(Name)、性别(Sex)、年龄(Age),要求有如下函数成员:构造函数、获取编号的函数和输出所有成员的函数。把在校人员类作为基类,通过公有继承,派生出学生类,派生类新增成员数据有数学(Math)、物理(Physical)、英语(English)和C++程序设计(CPP)四门课程以及总成绩(Total);新增成员函数有构造函数和输出所有成员的函数。main()完成派生类对象的定义和有关成员函数的测试。 2、由学生类、课程类作为基类,共同派生出选课类。 声明一个学生类(Student),有数据成员:学号(No)、姓名(Name)、性别(Sex)、年龄(Age),要求有如下函数成员:构造函数、输出所有成员的函数。 声明一个课程类(Lesson),有数据成员:课程编号(Cno)、课程名称(Cname)、学时数(Chour),要求有如下函数成员:构造函数、输出所有成员的函数。 将学生类和课程类作为基类,通过公有继承,共同派生出选课类(SL),派生类新增数据成员:成绩(Score);新增函数成员:构造函数、输出所有成员的函数。 main()完成派生类对象的定义和有关成员函数的测试。 3、由二维坐标点类Point作为基类派生出圆类Circle;再由圆类Circle作为基类派生出圆柱体类Cylinder。(提示:点类Point的数据成员为点坐标x、y,函数成员有构造函数和显示点坐标的函数show;Circle类新增数据成员为圆的半径radius,其成员函数show除了显示圆心的坐标外还能显示半径大小;Cylinder类新增数据成员为圆柱体高度height,其成员函数除了显示基类的所有数据成员外,还得显示圆柱体的高度) 四、实验记录 1、#include #include 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: "<

相关文档
最新文档