当前位置:文档之家› 抽象类的定义及使用

抽象类的定义及使用

抽象类的定义及使用
抽象类的定义及使用

1、课程名称:抽象类的定义及使用

2、知识点

2.1、上次课程的主要知识点

对象多态性总结如下:

·向上转型(90%):为了实现参数类型的统一,但是向上转型一定要与方法覆写产生关联;

·向下转型(1%):为了调用子类特殊的方法实现,但是向下转型前必须要首先发生向上转型,会存在操作的安全隐患,可以使用instanceof进行判断,但是不推荐这样使用;

·不转型(9%):为了方便操作直接使用系统类或者是一些功能类,例如:String、简单Java类。

2.2、本次预计讲解的知识点

1、抽象类的基本定义;

2、抽象类的使用原则。

3、具体内容(★★★★★★★★★★★)

不会抽象类与接口,Java = 没学。

3.1、抽象类的基本概念

如果说现在在一个类之中需要定义一个没有方法体的方法,那么可以利用abstract关键字来进行抽象方法的定义,而包含有抽象方法的类就可以使用abstract来定义成为抽象类。

类的核心组成:属性、方法,但是在学习完继承操作之后,会发现子类存在有一种覆写父类方法的机制,而且这一机制直接与对象的多态性有关。于是这样就会出现一个问题:假设现在使用的是普通类,并且在这个类里面有一个print()方法print()。

但是这个A类在设计之初有一个要求,希望继承它的子类一定要覆写这个print()方法。但事实上,这个时候的子类完全可以灵活的选择是否需要覆写方法。但是由于只是一个普通方法,所以对于子类是否覆写没有任何的要求,于是这样就会出现一个漏洞,父类无法强制要求子类覆写方法。

如果只依靠普通类的继承,那么根本就不能够对子类产生限制,所以就可以利用抽象类和抽象方法来解决此类问题。范例:定义抽象类

抽象方法的特点:一个是使用了abstract关键字定义,另外一个是方法的后面没有“{}”,表示没有方法体。

范例:错误的使用抽象类

本处直接采用了关键字new实例化了抽象类对象,但是在程序编译的时候就会出现如下的错误提示信息。

抽象类是不能够直接进行对象实例化操作的。因为一旦类的对象实例化了,就意味着可以调用类中的所有方法了,但是抽象方法只是一个声明,并没有具体的方法体。所以在实际的开发之中,对于抽象类的使用原则如下:·抽象类必须有子类,子类利用extends关键字来继承抽象类,一个子类只能够继承一个父类;

·抽象类的子类(如果不是抽象类),那么必须要覆写抽象类中的全部抽象方法;

·抽象类可以利用对象的向上转型机制,通过子类对象进行实例化操作。

抽象类与普通类相比最大的好处是强制定义了子类的实现要求。

本质上讲抽象类就是比普通类多了一些抽象方法的定义而已。

在实际的设计之中,父类的设计是最重要的,普通类与抽象类相比,明显抽象类的约束更加的严格,所以在实际的开发之中,不会几乎不会出现普通类定义子类的情况,大多数都是继承抽象类。

3.2、抽象类的相关说明

整个的设计结构里面多了抽象类的定义,那么多了一个定义之后,就需要与原始的结构有一些对比。

1、抽象类不能使用final关键字来定义,因为抽象类必须有子类,而final不能子类;

2、抽象类就是比普通类多了抽象方法而已,但是普通类中的所有结构抽象类都可以定义,包括:普通方法、构造方法、属性、常量等内容,而且子类对戏那个也符合于对象实例化流程,默认先调用父类中的无参构造,而后再执行子类自己的构造。

范例:思考题

本程序的解决关键思路:子类对象实例化前一定要先实例化父类对象,也就是说此时,子类对象的属性都没有内容。

3、抽象类中可以没有抽象方法,但是依然不可能使用关键字new进行对象的实例化操作;

因为类A上存在有abstract关键字,所以此处无法进行对象的直接实例化。

4、外部抽象类上不允许使用static声明,但是内部抽象类中可以使用static声明,这样表明的是一个外部抽象类;

范例:定义普通的内部抽象类

范例:在内部抽象类中使用static关键字

5、抽象类中可以存在有static方法,而且static方法不受实例化对象的控制。

范例:直接通过抽象类产生实例化对象

日后如果发现,在系统类库中有某个抽象类可以直接利用一个static方法取得实例化对象的时候不要觉得陌生。

以上出现的几种形式有一些是在后面讲解系统类库中会出现的问题,现阶段看看就完了。

3.3、抽象类实际应用——模版设计模式

清楚了抽象类产生动机以及抽象类的使用之后,下面就必须搞清楚一个问题,抽象类与普通类到底有那些区别?

现在假设有三个物种:

·机器人:补充能量+ 工作;

·人:吃饭+ 工作+ 睡觉;

·猪:吃+ 睡觉。

现在要求实现一种命令的模式,不管是何种物种,只要传递指定的指令就可以进行操作。

范例:实现程序操作

范例:定义子类

不同的子类有着自己不同的操作支持。范例:程序测试

现在在整个程序之中,如果某一类事物需要实现特定的功能,那么就必须按照Action所定义的方法进行覆写。这个时候子类必须按照父类提供的模版编写代码。

4、总结

1、抽象类的设计是在普通类之上的抽象类;

2、抽象类关键的问题就是约定了子类必须要覆写的抽象方法;

3、抽象类的使用原则:

·抽象类必须有子类,子类利用extends关键字来继承抽象类,一个子类只能够继承一个父类;

·抽象类的子类(如果不是抽象类),那么必须要覆写抽象类中的全部抽象方法;

·抽象类可以利用对象的向上转型机制,通过子类对象进行实例化操作。

C语言的类和对象

C语言的类和对象 【类实现了C++面向对象程序设计的基础,我们使用类来定义对象的属性,类是 C++封装的基本单元。】 一、----- 类 使用关键字class创建类,一个类声明定义了一个连接代码和一个数据的新类型,这个新的类型又可以用来声明该类的对象。因此,类又是逻辑逻辑抽象概念,儿对象是物理存在的,也就是说对象是类的实例。 类的声明语法上和结构相似。 [一下是完整的类的形式] class class_name { private data and functions access_specifier: data and functions access_specifiter: data and functions //…….. access_specifier:是 data and functions }object_list; 其中,object_list是任选项,如过存在,他声明类的对象。access_specifier为下面的三个关键字之一: Public private protected 默认时,在类声明的函数和数据属于该类私有,只能被该类的成员访问。如果使用,pubilc访问限定符号,函数和程序就可以被其他部分访问。Protected访问限定符,仅在涉及继承的时候才需要(十五章了解)。访问限定符已经使用,其作用就保持到遇到别的访问限定符或者达到类声明的结束处。 在类声明内可以任意改变访问说明符号,对于某些声明,可以转换位public,然后再转换成private。 [如下所述] /******************************* ··构造函数和析构函数学习··· *******************************/ //Using a constructor and destructor. /******************************* 声明C++ 程序头文件 *******************************/ #include #include #include #include /******************************* ·名字空间:组织大型的程序结构·

实验3 类的定义、对象的建立与使用

实验报告_实验3 类的定义、对象的建立与使用(学 生学号_姓名) 实验目的: 1、理解C++中class与struct的区别; 2、掌握类的定义以及成员函数的定义方法; 3、掌握对象的定义和对象成员的访问方式; 4、熟悉this指针的基本用法。 实验内容 二、((基础题)请按照下列要求定义一个Clock时钟类,并创建对象,再调用相应方法: 程序代码: //日期类的应用 #include using namespace std; class Clock // 定义日期类 { public: // 定义公有成员函数 void setTime(int h, int m, int s); void showTime(); private: // 定义私有数据成员 int hour; int minute;

int second; }; // 类定义体的结束 //类实现部分 void Clock::setTime(int h, int m, int s) { hour = h; minute = m; second = s; } void Clock::showTime() { cout << "设置时间为" << hour <<":"<< minute <<":"<< second << endl; } int main() { Clock now; now.setTime(8,30, 0); now.showTime(); return 0; } 三、(基础题)请按要求,编写程序(请将类的定义、成员函数的实现、类的使用分开): rect.h代码: #include

c#抽象类的概念

C#抽象类和抽象方法 如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类,在抽象类中声明方法时,如果加上abstract时就是抽象方法1.抽象类概述及声明 抽象类与非抽象类的主要区别: ·抽象类不能直接被实例化 ·抽象类中可以包含抽象成员,但非抽象类中不可以 ·抽象类不能被密封 举个小例子 public abstract class oneClass { public int i; public void denylau() { } } 2.抽象方法概述及声明 声明抽象方法时需注意:·抽象方法必须声明在抽象类中·声明抽象方法时,不能使用virtual、static、private修饰符。 在抽象类中抽象方法不提供实现。 如: public abstract class myTestClass() { public abstract void method(); } 3.抽象类与抽象方法的使用 直接举例子,讲解例子喽! using System; using System.Collections.Generic; using System.Text; namespace _ { public abstract class myClass { private string id = ""; private string name = ""; ///

/// 编号属性及实现 ///

public string ID { get { return id; } set { id = value; } } /// /// 姓名属性及实现 /// public string Name { get { return name; } set { name = value; } } /// /// 抽象方法,用来输出信息 /// public abstract void ShowInfo(); } public class DriveClass:myClass //继承抽象类{ /// /// 重写抽象类中输出信息的方法 /// public override void ShowInfo() { Console.WriteLine(ID + " " + Name); } } class Program {

类的定义和对象的创建

实验二类的定义和对象的创建 实验目的 1、学习定义类和使用类 2、学习创建的对象和使用对象 实验内容 1、定义一个Student类。其中定义有“学号”“姓名”“班级”“性别”“年龄”等属性,定 义一个无参数的构造器和至少一个有参数的构造器,定义“获得学号”“获得姓名”“获得班级”“获得性别”“获得年龄”“修改年龄”等方法。另外定义一个方法: public String toString( ) 把Student类的对象的所有属性信息组合成一个字符串,并检验这个功能的程序体现。 public class Student { private int 学号; private String 姓名; private String 班级; private char 性别; private int 年龄; public Student(int a, String b, String c, char d, int e) { 学号= a; 姓名= b; 班级= c; 性别= d; 年龄= e; } public Strudent() { this(0, "张三" ,"软件0901" ,'男', 19); } public int get学号() { return 学号; } public String get姓名() { return 姓名; } public String get班级() { return 班级; } public char get性别() { return 性别; } public int get年龄()

{ return 年龄; } public void set学号(int a) { 学号=a; } public void set姓名(String a ) { 姓名=a; } public void set班级(String a) { 班级= a; } public void set性别( char a) { 性别= a ; } public void set年龄(int a) { 年龄= a; } public String toString() { return "该学生的学号为"+ 学号+ " 姓名为"+姓名+" 班级为"+班级+ " 性别为" +性别+ " 年龄为" +年龄"; } } 2、编程实现圆类,其中包括计算圆周长和面积的方法,并测试方法的正确性。 public class Yuan { private double X, Y, R; public Yuan(double a, double b, double c) { X=a; Y=b; R=c; } public double MianJi() { return 3.1416*R*R; } public double ZhouChang() { return 2*3.1416*R; } public static void main(String[] args) { Yuan s=new Yuan(2,3,4); System.out.println("该圆的面积是"+ s.MianJi()); System.out.println("该圆的周长是"+ s.ZhouChang()); } }

C中类与类定义及具体使用方法

C中类与类定义及具体 使用方法 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

类模板 类模板也称为类属类或类生成类,是为类定义的一种模式,它使类中的一些数据成员和成员函数的参数或返回值可以取任意的数据类型。类模颁布是一个具体的类,它代表着一族类,是这一族类的统一模式。使用类模板就是要将它实例化为具体的类。 定义类模板的一般形式为: template class类名 { //…… } 其中,template是声明类模板的关键字;template后面的尖括号不能省略;数据类型参数标识符是类模板中参数化的类型名,当实例化类模板时,它将由一个具体的类型来代替。 定义类模板时,可以声明多个类型参数标识符,各标识符之间用逗号分开。 类定义中,凡要采用标准数据类型的数据成员、成员函数的参数或返回类型的前面都要加上类型标识符。 如果类中的成员函数要在类的声明之外定义,则它必须是模板函数。其定义形式为: template 数据类型参数标识符类名<数据类型参数标识符>∷函数名(数据类型参数标识符形参1,……,数据类型参数标识符形参n) { 函数体 } 模板类 将类模板的模板参数实例化后生成的具体的类,就是模板类。由类模板生成模板类的一般形式为:

类名<数据类型参数标识符>对象名1,对象名2,…,对象名n; 这里的数据类型参数标识符对应的是对象实际需要的数据类型。 应用举例 例函数模板的声明和模板函数的生成的例。 #include<> template//声明模板函数,T为数据类型参数标识符voidswap(T&x,T&y)//定义模板函数 { Tz;//变量z可取任意数据类型及模板参数类型T z=y; y=x; x=z; } voidmain() { intm=1,n=5; doublea=,b=; cout<<”m=”<

1.2 面向对象的基本概念

1.2 面向对象的基本概念 本节着重介绍面向对象的基本概念,也对相应的面向对象的技术方法做些说明和解释。 面向对象方法学的基本原则 面向对象方法学认为:客观世界是由各种“对象”所组成的,任何事物都是对象,每一个对象都有自己的运动规律和内部状态,每一个对象都属于某个对象“类”,都是该对象类的一个元素。复杂的对象可以是由相对比较简单的各种对象以某种方式组成的。不同对象的相互作用就构成了我们要研究分析和构造的客观系统。 面向对象方法学认为:通过类比,发现对象间的相似性,即对象间的共同属性,这就是构成对象类的根据。 面向对象方法学认为:对于已分成类的各个对象,可以通过定义一组“方法”来说明该对象的功能,也即是:允许作用于该对象上的各种操作。对象间的相互联系是通过传递“消息”来完成的。 面向对象方法学比较自然地模拟了人类认识客观世界的方法。即应使描述问题的问题空间和解决问题的方法空间在结构上尽可能地一致。我们分析设计和实现一个系统的方法尽可能接近我们认识一个系统的方法。 1.2.1 对象、类、消息 面向对象技术是基于对象(object )概念的。下面介绍对象概念。 在现代汉语词典中,对象是行动或思考时作为目标的人或事物。 在思维科学中,对象是客观世界中具有可区分性的、能够唯一标识的逻辑单元。对象所代表的本体可能是一个物理存在,也可能是一个概念存在。 “面向对象”是计算机科学中的一个技术名词,具有其特定的技术含义。从面向对象的观点来看,现实世界是由各式各样独立的、异步的、并发的实体对象组成,每个对象都有各自的内部状态和运动规律,不同对象之间或某类对象之间的相互联系和作用,就构成了各式不同的系统。 面向对象方法是基于客观世界的对象模型化的软件开发方法。在面向对象程序设计中,所谓对象,就是一个属性(数据)集及其操作(行为)的封装体。作为计算机模拟真实世界的抽象,一个对象就是一个实际问题论域,一个物理的实体或逻辑的实体。在计算机程序中,可视为一个“基本程序模块”,因为它包含了数据结构和所提供的相关操作功能。 我们把客观世界的实体称之为问题空间的对象,任何事物都是对象。 我们用计算机解题是借助某种语言规定对计算机实体施加某种动作,以此动作的结果去映射解,我们把计算机实体称之解空间的对象。 在面向对象的程序设计中,“对象”是系统中的基本运行实体。即对象是具有特殊属性(数据)和行为方式(方法)的实体。 从动态的观点看,对象的操作就是对象的行为。问题空间对象的行为是极其丰富的,而解空间对象的行为是极其死板的。因此,只有借助于极其复杂的算法才能操纵解空间对象而得到解。面向对象语言提供了“对象”概念,这样,程序员就可以定义解空间对象。 从存储的角度来看,“对象”是一片私有存储,其中有数据也有方法。其它对象的方法

接口和抽象类习题-答案

(一)选择题 1.以下哪个接口的定义是正确的? A.interface B{ void print() { } ; } B.abstract interface B { void print() ; } C.abstract interface B extends A1,A2 { abstract void print(){ }; } D.interface B { void print();} 2.定义一个接口时,下列哪个关键字用不到? A.public B.extends C.interface D.class 3.定义一个接口时,要使用如下哪个关键字? A.abstract B.final C.interface D.class 4.在使用interface声明一个接口时,只可以使用哪个修饰符修饰该接口。 A.private B.protected C.private或者protected D.public 5.下列类头定义中,错误的是? A.public x extends y B.public class x extends y C.class x extends y implements y1 D.class x 6.下列类定义中,不正确的是? A.class x B.class x extends y C.class x implements y1,y2 D.public class x extends X1,X2 7.Java中能实现多重继承功能的方式是? A.接口 B.同步 C.抽象类 D.父类 8.下列叙述正确的是? A.Java中允许多重继承 B.Java一个类只能实现一个接口 C.Java中只能单重继承 D.Java中一个类可以继承多个抽象类 (二)简答题

Java中的abstract方法和abstract类的问题

Java中的abstract方法和abstract类的问题 当知道一个类的子类将不同的实现某个方法时,把该类声明为抽象类很有用,可以共用相同的父类方法,不必再定义。 抽象类和抽象方法的关系:含有抽象方法的类一定是抽象类,抽象类里不一定含有抽象方法。抽象类存在的意义是用来被继承的。一个类继承了一个抽象类,必须实现抽象类里面所有的抽象方法,否则,此类也是抽象类。 abstract修饰符用来修饰类和成员方法 1:用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化。2:用abstract修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。 abstract 规则: 1:抽象类可以没有抽象方法,但是有抽象方法的类必须定义为抽象类,如果一个子类继承一个抽象类,子类没有实现父类的所有抽象方法,那么子类也要定义为抽象类,否则的话编译会出错的。 2:抽象类没有构造方法,也没有抽象静态方法。但是可以有非抽象的构造方法 3:抽象类不能被实例化,但是可以创建一个引用变量,类型是一个抽象类,并让它引用非抽象类的子类的一个实例 4:不能用final 修饰符修饰 Q:java里面有抽象类么?和接口的区别是什么? A:java中有抽象类,用关键字abstract修饰。 以下是我对这个问题的看法。 首先,从语法上讲,抽象类是一个类,根据java的单继承体系。如果它有子类,那么它的

子类只能继承它。 java允许实现多个接口。所以一个类可以实现多个接口 抽象类里面可以定义各种类型和访问权限的变量(就像普通类一样),也可以定义各种访问权限的方法(就像普通类一样)。 但是接口不可以。在接口里面定义的方法默认就是public abstract的,变量默认就是public static final的。(不管你有没有加权限控制符,不加,默认就是这些权限;加错了,权限缩小了,那么就会报错) 其次,从意义上讲,如果继承一个抽象类,那么抽象类和它的子类就有父子关系,即有类的层次关系(这关系到类的设计问题)。 接口,在我看来,是一种契约或者协议,是一层提供给另一层的接口(可以想象成OSI各层之间的关系) 在某一层中有多个类协作实现这个层的功能,通过接口暴露出去。但这些类之间会有层次关系(is a,has a) Q:一个方法加abstract和不加abstract有什么区别?就是说不加有什么关系?加了又会怎样? A:一方法要是加abstract,那么这个方法就是抽象的,须由子类去实现 抽象方法必须在抽象类当中,也就是说,一个类只要有一个方法是抽象的,那么这个类就必须是抽象类 抽象类里面的方法不一定要抽象的,也可以全都不是抽象的 抽象类不能实例化! 所以可以想到,当你不想让你的类被别人实例化,只想这个类的子类可以实例化,那么只要将这个类声明为abstract的就可以了

抽象类的定义及使用

1、课程名称:抽象类的定义及使用 2、知识点 2.1、上次课程的主要知识点 对象多态性总结如下: ·向上转型(90%):为了实现参数类型的统一,但是向上转型一定要与方法覆写产生关联; ·向下转型(1%):为了调用子类特殊的方法实现,但是向下转型前必须要首先发生向上转型,会存在操作的安全隐患,可以使用instanceof进行判断,但是不推荐这样使用; ·不转型(9%):为了方便操作直接使用系统类或者是一些功能类,例如:String、简单Java类。 2.2、本次预计讲解的知识点 1、抽象类的基本定义; 2、抽象类的使用原则。 3、具体内容(★★★★★★★★★★★) 不会抽象类与接口,Java = 没学。

3.1、抽象类的基本概念 如果说现在在一个类之中需要定义一个没有方法体的方法,那么可以利用abstract关键字来进行抽象方法的定义,而包含有抽象方法的类就可以使用abstract来定义成为抽象类。 类的核心组成:属性、方法,但是在学习完继承操作之后,会发现子类存在有一种覆写父类方法的机制,而且这一机制直接与对象的多态性有关。于是这样就会出现一个问题:假设现在使用的是普通类,并且在这个类里面有一个print()方法print()。 但是这个A类在设计之初有一个要求,希望继承它的子类一定要覆写这个print()方法。但事实上,这个时候的子类完全可以灵活的选择是否需要覆写方法。但是由于只是一个普通方法,所以对于子类是否覆写没有任何的要求,于是这样就会出现一个漏洞,父类无法强制要求子类覆写方法。 如果只依靠普通类的继承,那么根本就不能够对子类产生限制,所以就可以利用抽象类和抽象方法来解决此类问题。范例:定义抽象类 抽象方法的特点:一个是使用了abstract关键字定义,另外一个是方法的后面没有“{}”,表示没有方法体。 范例:错误的使用抽象类 本处直接采用了关键字new实例化了抽象类对象,但是在程序编译的时候就会出现如下的错误提示信息。 抽象类是不能够直接进行对象实例化操作的。因为一旦类的对象实例化了,就意味着可以调用类中的所有方法了,但是抽象方法只是一个声明,并没有具体的方法体。所以在实际的开发之中,对于抽象类的使用原则如下:·抽象类必须有子类,子类利用extends关键字来继承抽象类,一个子类只能够继承一个父类; ·抽象类的子类(如果不是抽象类),那么必须要覆写抽象类中的全部抽象方法; ·抽象类可以利用对象的向上转型机制,通过子类对象进行实例化操作。

任务实训15--抽象方法和抽象类的应用

任务实训15 抽象方法和抽象类的应用 一、实训目的 1. 掌握Java抽象方法抽象类 二、实训内容 1、抽象方法、抽象类的应用 三、实训步骤 1.定义抽象类几何类、普通类圆类和矩形类,完成抽象类的继承和使用。 1)首先创建一个类家族,其中抽象类几何图形类GeometricObject为父类,圆类Circle和矩形类Rectangle为子类。几何图形类GeometricObject中定义保护型字符串变量color,表示图形的颜色;该类要具备构造方法和两个抽象方法findArea和findPerimeter,抽象方法findArea求图形面积,抽象方法findPerimeter求图形周长。 2)Circle类和Rectangle类是GeometricObject类的子类,其中应实现父类的抽象方法。 3)程序主方法中创建两个几何对象,一个圆和一个矩形,并用GeometricObject类的引用变量引用它们,调用抽象方法。 abstract class GeometricObject { protected String color; protected double weight; protected GeometricObject(String color, double weight) { this.color = color; this.weight = weight; } public abstract double findArea(); public abstract double findPerimeter(); } class Circle extends GeometricObject { protected double radius;

实验6 类的定义与使用--练习

实验6 类的定义与使用 一、实验目的和任务 类的定义与使用 1)掌握类的概念、定义格式、类与结构的关系、类的成员属性和类的封装性; 2)掌握类对象的定义; 3)理解类的成员的访问控制的含义,公有、私有和保护成员的区别; 4)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数; 二、实验原理介绍 通过建立类及对象,用类的成员函数和对象访问类的成员; 利用建立类的构造函数,完成类的成员的初始化工作; 三、实验设备介绍 软件需求: Visual C++ 6.0 四、实验内容和步骤 1、声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中rank为枚举类型,声明为enum CPU_Rank { p1=1,p2,p3,p4,p5,p6,p7},frequency为单位是MHz的整形数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。 2、声明一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。 3、(选做)设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数。组合。 思考题 1、注意类的定义; 2、类的成员函数的访问方式; 五、注意事项和要求 要求学生要提前准备实验的内容 实验完成后要求写出实验报告

实验7 抽象类

实验7 抽象类 一、实验目的 掌握抽象类的定义,理解抽象类与一般类的区别。进一步理解多态性的概念。 二、实验要求 1.掌握抽象类的定义,理解抽象方法。 2.掌握抽象类的使用。 三、实验内容 1)制作一个销售首饰的公司类。 属性: 一个保存员工的数组(也可采用Vector类来保存员工)。 方法: 1, 添加一个员工。 2, 通过员工的名字来删除员工。 3, 通过员工的名字来显示员工的工资。 4, 输出所有员工的工资和。 2)定义一个抽象员工类 属性:姓名,基本工资 抽象方法:计算工资。 3)子类:小时工类 属性: 工作的小时,每小时工资。 方法: 1. 设置工作的小时 2. 设置每小时的工资。 3. 重写计算工资方法: 小时工没有基本工资,他的工资就是工作的小时*每小时工资。 4)子类:销售员工类 属性: 销售的总金额 方法 1. 设置销售的总金额

2. 重写计算工资方法: 基本工资+提成。 提成的计算: 当销售额再10000 以下时,则提成10%, 等销售额再10000-100000之间是,则提成15%。 再100000以上是,提成18%。 5)子类:普通员工类 属性: 工作的小时 方法: 1. 设置工作的小时 2. 重写计算工资的方法: 当每月工作的小时数超过196 小时时,超出的部分按每小时200 元。基本工资+(工作的小时-196)*200。 6)在main 函数中生成 一个公司对象; 一个小时工的对象,每小时工资10,工作200 小时; 一个小时工的对象,每小时工资10,工作230小时; 一个销售员工的对象,基本工资1000,销售额5000; 一个销售员工的对象,基本工资1000,销售额200000; 一个普通员工对象,基本工资1200,工作小时205 小时。 (注:员工的姓名可自行拟定。) 将以上员工对象加入公司对象中,然后调用输出所有员工工资和的方法,查看该公司该月应该发的工资总和。 7)随着该公司的业务扩展,该公司决定自己生产首饰,该公司多了一种新的类型的员工,首饰工人。 定义首饰工人类: 属性 生产首饰的数量 方法 1 设置生产首饰的数量 2 重写计算工资的方法 工资== 设置生产首饰的数量*50; 8) 在main 函数中多生成一个首饰工人对象,生产首饰的数量30; 将该对象加入公司对象中, 然后调用输出所有员工工资和的方法,查看该公司该月应该发的工资总和。 四、思考题 继承,多态对于程序的可维护,可扩展带来的好处。

JAVA类与对象的创建

试验四 类和对象的创建 一.类的定义 类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类用来定义对象的模板。 类的实现包括两部分:类声明和类体。基本格式为: 修饰符class类名[extends父类名]{ /*类体的内容*/ } 1.类声明 以下是一个类声明的例子。 class People成为类声明,People是类名。习惯上,类名的第一个字母大写,但这不是必须的。类的名字不能是Java中的关键字,要符合标识符规定,即类的名字可以由字母、下划线、数字或美元符号组成,并且第一个字母不能是数字。但给类命名时,最好遵守下列规则: (1)如果类名使用拉丁字母,那么名字的首写字母使用大写字母,如Hello、Time、People等。 (2)类名最好容易识别,当类名由几个“单词”复合而成时,每个单词的首写字母使用大写,如BeijingTi me、AmericanGame、HelloChina等。 2.类体 编写类的目的是为了描述一类事物共有的属性和功能,描述过程由类体来实现。类声明之后的一对大括号“{”、“}”以及它们之间的内容称为类体,大括号之间的内容称为类体的内容。 类体的内容由两部分构成:一部分是变量的定义,用来刻画属性;另一部分是方法的定义,用来刻画功能。 下面是一个类名为“Trapezia”的类,类体内容的变量定义部分定义了4个float类型变量:top、bottom、h igh和laderArea,方法定义部分定义了两个方法:“getArea”和“setHigh”。

二.对象 1.对象的创建 创建一个对象包括对象的声明和为对象分配内存两个步骤。 (1)对象的声明。 一般格式为: 类的名字对象名字; 如: 这里People是类的名字,zhubajie是我们声明的对象的名字。 (2)为声明的对象分配内存。 使用new运算符和类的构造方法为声明的对象分配内存,如果类中没有构造方法,系统会调用默认的构造方法(你一定还记得构造方法的名字必须和类名相同这一规定),如: 例1: 「注」如果类里定义了一个或多个构造方法,那么Java不提供默认的构造方法。 2.对象的使用 对象不仅可以改变自己变量的状态,而且还拥有了使用创建它的那个类中的方法的能力,对象通过使用这些方法可以产生一定的行为。 通过使用运算符“.”,对象可以实现对自己的变量访问和方法的调用。 例2:

类的定义与使用

一、实验目的和任务 类的定义与使用 1)掌握类的概念、定义格式、类与结构的关系、类的成员属性和类的封装性; 2)掌握类对象的定义; 3)理解类的成员的访问控制的含义,公有、私有和保护成员的区别; 4)掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。能够根据给定的要求定义类并实现类的成员函数; 二、实验原理介绍 验证性实验; 通过建立类及对象,用类的成员函数和对象访问类的成员; 利用建立类的构造函数,完成类的成员的初始化工作; 三、实验设备介绍 软件需求: Visual C++ 6.0 四、实验内容 1、声明一个CPU类,包含等级(rank)、频率(freauency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中rank为枚举类型,声明为enum CPU_Rank { p1=1,p2,p3,p4,p5,p6,p7},frequency为单位是MHz的整形数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。 实验原理:构造CPU类私有成员为等级(rank)、频率(freauency)、电压(voltage),其中rank为枚举类型,声明为enum CPU_Rank { p1=1,p2,p3,p4,p5,p6,p7},然后设置public 的构造函数CPU,有频率和电压。使频率f等于形参x,电压u等于y,此为构造的函数。然后运用析构函数,其符号为~,运用析构函数。一个类只能定义一个析构函数,析构函数

没有形参,且其顺序较特殊,对于含有多个对象的程序,先创建的对象后析构,后创建的对象先析构。所以析构函数出现在最后。此程序中,三个对象CPU run stop ,CPU析构,在主函数中运行了构造函数,run stop执行后析构。 实验源程序: #include class CPU {private: int f; double u; enum CPU_Rank{P1=1,P2,P3,P4,P5,P6,P7}; public: CPU(int x,double y) { f=x; u=y; cout<<"调用构造函数"<<"f="<

文本预览
相关文档 最新文档