5类和对象

合集下载

C#语言培训5 类与对象

C#语言培训5 类与对象

对象的声明和使用-1
• 声明一个对象也就是类的实例化过程。对象是类的具体化 的体现。如创建一个类Person,它的成员变量有姓名、年 龄、性别、等,这个类是所有人所拥有属性的共同体现, 具体到某一个人,你、我、他就是这个类的对象。首先创 建一个类Person,代码如下: class Person { //成员变量 public string name; public int age; public string gender; }
静态类与非静态类-1
public static class Demo { //类的成员 } public class Test { //类的成员 }
静态类与非静态类-2
静态类 用static修饰 只包含静态成员 不可以包含实例成员 使用类名调用静态成员 不能被实例化 不能包含实例构造函数 非静态类 不用static修饰 可以包含静态成员 可以包含实例成员 使用实例对象调用非静态成员 可以被实例化 包含实例构造函数
本章介绍
• • • • • • 类的概述 对象的概述 类与对象的关系(重点、难点) 构造方法(重点、难点) 方法重载(重点、难点) 自定义方法(重点、难点)
ห้องสมุดไป่ตู้
C#中的类
• 面向对象编程技术中最重要的概念就是类 和对象,那么到底什么是类?在编程中如 何去运用呢?这就是这节主要完成的任务。 • 学习面向对象的编程,重要的是要运用面 向对象的思想来思考问题,在学习和练习 中不断摸索、思考,才能熟练掌握。
方法的声明
• <访问修饰符> 返回类型 方法名([参数列表]) { //方法体 } 访问修饰符(可选),默认情况下为 private
如果不需要返回任何值,则返回 void 数据类型

第五章 类图和对象图(UML)

第五章 类图和对象图(UML)


size
:integer
=(100)
9
第 五 章 类 图 和 对 象 图
5.1 类的定义
说明:
3、属性还有取值范围。类型表示该属性的种类。 它可以是基本数据类型,例如整数、实数、布尔 型和枚举型等,也可以是用户自定义的类型。一 般它由所涉及的程序设计语言确定必须为其指定 数据类型。当一个类的属性被完整定义后,它的 任何一个对象的状态都由这些属性的特性值所决 定。
20
第 五 章 类 图 和 对 象 图
5.2 类之间的关系
1、关联
关联是一种结构关系,它指明一个事物的对象与 另一个事物的对象间的联系 例如,一个人为一家公司工作,一家公司有许多办 公室。我们就认为人和公司、公司和办公室之间 存在某种语义上的联系。在分析设计的类图模型 中,则在对应人类和公司类、公司类和办公室类 之间建立关联关系
改变的因素:1.一个类向另一个类发送消息。 2.一个类是另一个类的数据成员类型 3.一个类是另一个类的操作的参数类型 注:如果两个类之间有关联,那么这两个类就有依赖关 系,但是我们一般不标出依赖关系。
37
第 五 章 类 图 和 对 象 图
5.2 类之间的关系
3、泛化(generalization)关系
泛化关系:定义了一般元素和特殊元素之间的分类关系。 也就是一种继承关系。继承是在现有类的基础上定义和 实现一个新类的技术,刻画了类的一般性和特殊性。被 继承的类称为父类或超类,继承的类称为子类。 表示形式:用空心三角箭头实心线表示
25
第 五 章 类 图 和 对 象 图
5.2 类之间的关系
1、关联
角色:当一个类处于关联的某一端时,该类就在 这个关系中扮演着一个特定的角色。角色就是关 联关系中一个类对另一个类所表现的职责

5.5 类与对象应用的例子

5.5 类与对象应用的例子

Pump::Pump(float start, float todays) { amtint=start; price=todays; } void Pump::values( ) { cout<<"The gas tank has: "<<amtint<<endl; cout<<"The price per kg of gas is: "<<price<<endl; } void Pump::request( float pumpamt) { float pumped; if( amtint>=pumpamt ) pumped=pumpamt; //满足 else pumped= amtint; amtint=amtint-pumped; //加油后剩余数 cout<<pumpamt<<" kg were requested"<<endl; cout<<pumped<<" kg were pumped"<<endl; cout<<amtint<<" kg remain in the tank"<<endl; cout<<"The total price is: "<<(pumped*price)<<endl; }
♦ 关于操作的具体分析如下:
油泵进入服务 初始化油桶中的汽油数量 初始化每公斤汽油的价格 显示操作(函数) 显示油桶中汽油的数量 显示每公斤汽油的价格 抽出汽油进行加油的操作(函数) IF(油桶中汽油数量大于或等于需要被抽出的汽油数 量)将抽出数量设置成需要抽出的数量 ELSE将抽数量设置成油桶中所剩汽油的数量 ENDIF 将油桶中汽油的数量减去被抽出汽油的数量,计算总 金额(汽油单价乘以被抽出数量),显பைடு நூலகம்被抽出的汽油数 量,显示油桶中剩下的汽油数量,显示应付金额。

1.什么是类?什么是对象?对象和类是什么关系?

1.什么是类?什么是对象?对象和类是什么关系?

1.什么是类?什么是对象?对象和类是什么关系?答:类是抽取了同类对象的共同属性和行为形成的对象或实体的“模板”。

对象是现实世界中实体的描述,是其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的独立实体。

类和对象之间的关系是抽象和具体的关系:类表达的是一种抽象的概念,它描述了该类对象的共同特征;而对象是具体事物,以类为模板来生成,它具有自己的状态。

举例:类与对象的关系犹如零件的图纸与按图纸制造出的零件关系一样;图纸(类)描述了零件(对象)的共同特征,每个零件(对象)又有自己的个性,如加工精度的不同等等2、什么是方法?方法的结构是怎样的?设计方法应考虑哪些因素?答:方法是Java类的一个组成部分,通过类的方法改变对象的状态。

方法的结构:[方法修饰符] 返回值类型方法名([形参列表])[throws异常列表] {方法体;}设计方法应考虑因素有:(1) 方法名是Java中任意的标识符,按照命名的约定,方法名应该是有意义的动词或动词短语,它的第一个字母一般要小写,其他有意义的单词的首字母要大写,其余字母小写。

(2) 返回值类型可以是任意的Java类型,甚至可以是定义此方法的类。

如果方法没有返回值,则用void表示。

(3) 形式参数列表是可选的。

如果方法没有形式参数,就用一对小括号“()”表示。

形式参数列表的形式如下:(类型形参名,类型形参名,……)(4) throws异常列表规定了在方法执行中可能导致的异常。

3.创建一个有两个方法的类,,第一个使用this,第二个不使用this。

class Rectangle //矩形类{int width; // 矩形的宽int usethis(int width) //返回宽度的函数{this. width= width; //指自己这个对象return width;}int unusethis(int width){ int w=width;return w;}public static void main(String args[]){Rectangle r=new Rectangle(); //类对象的实例化System.out.println("It is about the node of this."); //输出语句System.out.println(ethis(1));System.out.println(r.unusethis(2));运行结果:It is about the node of this.124、创建一个类,该类还有int和char类型的成员变量且未被初始化,然后编程输出这些成员变量的值,查看java是否执行了默认的初始化操作。

对象和类的区别与联系

对象和类的区别与联系

对象和类的区别与联系在面向对象编程(Object-oriented programming, OOP)中,对象和类是两个重要的概念。

它们之间既有区别,又有联系。

本文将从几个方面来探讨对象和类的区别与联系。

一、定义和特点对象是类的实例化结果,是类的具体表现。

它具有状态(属性)和行为(方法),可以进行数据的存储和处理。

对象可以是实物,如一辆汽车;也可以是抽象的,如一个人。

每个对象都有特定的属性和行为,但属性值可以在不同的对象之间有所变化。

类是对象的抽象描述,是具有相同属性和行为的一组对象的集合。

类定义了对象的共同特征和行为模式。

它包含了对象的属性和方法的声明,但不包含具体的数据。

类是创建对象的模板,在类的基础上可以创建多个对象。

二、关系1. 单向关系:类和对象之间是单向的关系,类可以创建对象,对象则不能创建类。

2. 多对多关系:一个类可以创建多个对象,多个对象可以属于同一个类。

3. 继承关系:类可以通过继承关系来派生子类,子类可以继承父类的属性和方法,并可以扩展和重写父类的功能。

三、区别1. 定义方式:对象是通过类的构造函数来创建的,使用“new”关键字可以实例化一个对象;而类是通过class关键字来定义的,使用类名可以创建多个对象。

2. 范围:对象是类的实例,是类的子集;而类是对象的模板,在类的基础上可以创建多个对象。

3. 数据共享:同一个类的多个对象之间可以共享类的静态属性和方法;而对象的非静态属性和方法是各自独立的。

4. 属性和方法的调用:对象通过“对象名.属性名”或“对象名.方法名(参数)”的方式来调用自身的属性和方法;而类是通过“类名.属性名”或“类名.方法名(参数)”的方式来调用类的属性和方法。

四、联系对象和类是紧密相关的,它们之间有如下联系:1. 对象的创建依赖于类,类提供了对象的模板和行为规范。

2. 对象是类的实例,类描述了对象所具有的属性和方法。

3. 类可以通过创建多个对象来实现代码的复用和灵活性。

5 类和对象

5 类和对象

公有数据 数据 私有数据 方法 对象A 方法 对象B
面向对象的概念-封装(encapsulation)
封装是指按照信息屏蔽的原则,把对象的属性和操 作结合在一起,构成一个独立的对象,并尽可能地 隐蔽对象的内部细节,通过有限的接口与外部发生 联系。外部对象不能直接操作对象的属性,只能使 用对象提供的服务,通过该对象所允许的接口与之 进行交互。 封装所提供的将对象的静态特征和动态特征结合在 一起、不可分割的机制,是面向对象技术必须提供 的一种基本能力。
类的封装(encapsulation)
封装的目的 隐藏类的实现细节 迫使用户通过接口去访问数据 增强代码的可维护性 封装的实现 Java通过访问权限来实现封装,访问权限有4种: public, protected, 缺省, private 类的访问权限 类只能使用public修饰,或缺省 一个Java源文件可以有多个类,最多只能有一个类用public修 饰 Java源文件中如果有public类,文件名必须和该类名相同
面向对象的概念——使用类
为什么要使用类?
采用简单数据类型表示现实世界中概念存在很大的局限 性。例如:采用int型数据表示一个日期概念,需要使用 3个变量: int day, month, year; 并且在使用中必须时刻注意三者的联系和约束关系 同时在使用日期概念时要同时对三个对象进行访问
1. 接受消息的对象 2. 接收对象要采取的方法 3. 方法需要的参数
消息
对象B
对象 A
面向对象的概念——例子
class Hello { private String s;//变量 public void showString() { // 方法 System.out.println(s); } public void changeString(String str) { // 方法 s = str; } } 在程序中所操作对象是类的一个实例。 Hello hello = new Hello(); //创建对象 hello.showString(); //调用对象的方法 调用对象的方法相当于给对象发送消息,收到消息的对象通过改 变自身的状态或者向其它对象发送消息来响应消息。

类和对象基本概念及其使用

类和对象基本概念及其使用

类和对象基本概念及其使⽤⼀、对象1、Java程序运⾏的基本单位,类似于组成客观上世界中个体2、对象包含两个⽅⾯:(1)、属性——⽤成员变量表⽰(2)、⾏为——⽤成员⽅法表⽰⼆、类类是所有对象共性的抽象(1)、属性——描述对象中哪些属性(通过定义成员变量)(2)、⾏为——描述对象有哪些⾏为,以及⾏为的具体表现(通过定义成员⽅法)三、类和对象的关系1、类是⽤来描述对象的:(1)、描述对象有哪些属性(2)、描述对象有哪些⾏为2、对象是类的具体化四、对象的创建及使⽤1、创建对象,⾸先要定义类,描述对象有哪些属性和⾏为2、定义好类之后,就可以使⽤new关键字,创建该类的对象3、对象的使⽤,即访问对象的成员,通过对象名.的形式(1)、成员变量(属性)(2)、成员⽅法(⾏为)五、从数据类型⾓度理解类和对象1、类:(1)、定义了⼀组数据集合(成员变量)和基于这个数据集合的⼀组操作(成员⽅法)(2)、是⼀种⾃定义数据类型2、对象:⾃定义数据类型的⼀个“变量”六、类和对象的内存映像1、类信息存储在⽅法区中,并且包含了每个⽅法实现的字节码指令2、对象存储在堆上,对象中只存储了成员变量的值/**1、定义⼀个学⽣类:属性(成员变量):姓名,性别,年龄,学号⽅法(成员⽅法):吃饭,睡觉,学习2、定义了类,我们就有了对同种类型对象的描述,我们就可以创建学⽣对象了a、创建对象类名对象名 = new 类名();b、给对象的属性赋值,或者访问对象的属性对象名.属性名c、访问对象的⾏为对象名.⽅法*/public class Demo{public static void mian(String[] args){S tudent s1 = new Student();//每个对象的属性都可以有不同的取值 = "zhangsan";s1.age = 20;s1.isMale = true;s1.sno = 1;s.eat();System.out.println( + "——" + s1.age + "——" + s1.isMale + "——" + s1.sno); }}/*定义学⽣类,来描述所有学⽣对象,共有属性和⾏为*/class Student{//成员变量String name;boolean isMale;int age;int sno;//成员⽅法public void eat(){System.out.println("吃饭");}public void sleep(){System.out.println("睡觉");}public void study(){System.out.println("学习");}}。

5 类与对象

5 类与对象
8/54
§5.2 类的定义
5.2.1 类声明
类是对一群具有相同属性、表现相同行为的对象的 描述,类声明的一般形式 :
class 类名 { public:
公有数据和函数 private: 私有数据和函数 };
类中定义的数据(变量)称为数据成员 类中定义的函数(行为操作)称为成员函数
9/54
§5.2 类的定义
class C {
int get_value() const { …… } };
13/54
§5.2 类的定义
5.2.2 类成员的访问控制
指明成员的可访问性 私有段:由private标记的段 段内的数据成员和成员函数称为私有成员,仅能 由该类中的成员函数来访问,即仅可在成员函数 定义中使用私有成员的名字。 公有段:由public标记的段 段内的数据成员和成员函数称为公有成员,为该 类提供与外部世界的接口界面,即可在类内也可 在类外访问。 类中每一个成员都有访问控制属性,若没有明确 指明,成员的访问控制方式缺省为private。
4/54
§5.1 类的引入
5.1.1 循环计数器 保护内部数据: static int min_val; static int max_val; static int current; 在C语言中用文件作为模块来实现 信息隐藏


将一个模块的内部数据或操作隐藏起来,其 他模块只能通过该模块提供的公开操作来访 问该模块 信息隐藏由封装机制来实现。
23/54
§5.4 对象的初始化
5.4.1 构造函数


类中的一个特殊函数 功能:对该类的对象进行初始化 一般形式:类名(形式参数表); 特点:
22/54
§5.3 对象的创建

UML课件5-类图和对象图详解

UML课件5-类图和对象图详解

5.4.3 寻找类(三种常用方法)
1. 使用名词/动词法分析寻找类
收集相关信息 补充的需求规格说明 用例 项目词汇表 其他文档
选取类的属性时只考虑系统用到的特征,不必将所有属 性都表示出来,原则上,由类的属性应能区分每个特定 的对象。
5.1.1 属性
可见性
属性的可访问性,四类: 公共(public)
私有(private)
保护(protected)
实现(implementation) 子类无法继承和访问父类的私有属性和实现属性
先调用Order的dispatch ()方法,它将根据其包含的OrderItem中 产品信息,来按供应商户分拆成若干个DeliverOrder。商户登录 系统后就可以获取其DeliverOrder,并在执行完成后再调用close ()方法。此时,就将调用OrderItem的stateChange()方法来改变 其状态。同时再调用Order的close()方法,判断该Order的所有 的OrderItem是否都已经送到了,如果是就将其真正close()掉。
一个公司有多个部门,一个职员为其中某部门工作,则 可推导该职员为该公司工作。
5.2.2 泛化
Generalization,一般元素和特殊元素之间 的关系。即OO语言中,类之间的继承关系
斜体表示 抽象类
5.2.2 泛化
泛化的目的
自顶向下的属性继承。可以使得子类共享父类的属性 和操作,实现继承。
5.1.2 操作
标准格式:
[可见性] 操作名[ (参数列表) ] [: 返回值类型][{特性}]
例:
+display() #create() -attachXWindow(xwin:XWindowPtr) +getname():String

java的类和对象 第5章(1)

java的类和对象  第5章(1)
29
例题----方法调用测试
public class CircumferenceTester
{ public static void main(String args[])
{ Circle c1 = new Circle(); c1.radius = 50; Circle c2 = new Circle(); c2.radius = 10; double circum1 = c1.circumference(); //调用 double circum2 = c2.circumference(); System.out.println("Circle 1 has circumference " + circum1); System.out.println("Circle 2 has circumference " + circum2);
类的声明(3)
修饰符 可以有多个,用来限定类的使用方式 abstract 指明此类为抽象类,其概念和使用方法将在第6章 介绍。 final 指明此类为终结类,不能用最终类生成子类。
类声明体 数组成员及方法成员 数组成员说明了类的静态属性,而方法成员一般是 对类的静态属性进行一些相应的操作。 初始化体 可以有多个,具体的在5.3节介绍。
21
5.1.2 方法成员的定义及重载
方法成员 定义类的行为 一个对象能够做的事情 我们能够从一个对象取得的信息 可以没有,也可以有多个;一旦在类中声明了方 法,它就成为了类声明的一部分 分为实例方法和类方法
5.1.2 方法成员的定义及重载
声明格式: [访问控制符] [修饰符] 方法返回值类型 方法名([参数表]) { 方法体; }
类的声明——例1(钟表类)

Java编程基础及应用(第2版)教学课件第5章 类和对象

Java编程基础及应用(第2版)教学课件第5章 类和对象
变量定义及初始化;〃声明成员变量 [方法修饰字]返回值的数据类型方法名称(参数1,参数 2...)
{ 程序语句! 〃定义成员方法 [return表达式];
} }
7
§5.1.2 类的定义
说明: (1) class关键字,用于定义类。“class类名”是类的声明 部分, 类名必须是合法的Java标识符,通常第一个字母大写 ,能体现类的功能和作用。 (2 )类的修饰字有:[public] > [abstract | final] 、缺省方式 为 friendly。其中,abstract类不能直接产生属于这个类的对 象;final类不能被其他任何类所继承;public类不但可以被同 一程序包中的其他类使用,别的程序包中的类也可以使用; friendly(缺省)类只能被本包中的其他类使用。
一个对象 就要为对象的各个成员变量分配存 储空间,可以通过 引用对象的成员来使用对 象。 -对象数据成员的引用方式如下:
-对象成员方法的引用方式如下:
22
§5.1.3 对象的创建、使用及清除
例5.3定义DogTestl类,创建该类对象dog,使用该对象 并输
岀相应信息。
程序运行结果: dog阿黄的年龄:3,毛发的颜色:黄色 狗在汪汪叫…
(4) 方法不能嵌套,即不能在方法中再声明其他方法。 (5) 同一个类中的方法可以访问该类的成员变量。 (6) 一个类的方法只能访问自己的局部变量。
17
§5.1.2 类的定义
-例5.1定义Dog类,并设置其属性和方法。
在上面的程序屮,Dog类定义了name、age和color三 个属性,分别表示狗的姓名、年龄和毛发颜色,然后 定义了一个bark()方法,表明狗有汪汪叫的能力。
返回值的 类型和访问限制;方法体由括号内的声明部分和语 句部分组成,描述方法的功能。

5 类与对象

5 类与对象

Page 12
§5.3.1
构造方法
构造方法是一种特殊方法,它的名字必须与它所 在的类的名字完全相同,而且没有类型。 允许一个类中编写若干个构造方法,但必须保 证他们的参数不同,即参数的个数不同,或者是 参数的类型不同。
需要注意的是

(1) 如果类中没有编写构造方法,系统会默认该类只有 一个构造方法,该默认的构造方法是无参数的,且方法体 中没有语句。 (2)如果类里定义了一个或多个构造方法,那么Java不 Page 13 提供默认的构造方法 。
方法的定义包括两部分:方法声明和方法体。一 般格式为: 方法声明部分 {


方法体的内容
}
Page 9
§5.2.5

需要注意的问题
类体的内容由两部分构成:变量的声明,方法 的定义。 对成员变量的操作只能放在方法中,方法可以 对成员变量和该方法体中声明的局部变量进行操 作。 在声明成员变量时可以同时赋予初值,但是不 可以在类体中有单独的赋值语句(不可以有变量 的声明和方法的定义以外的其它语句)。
Page 20
§5.4.3
引用类型参数的传值
当参数是引用类型时,“传值”传递的是变量中 存放的“引用”,而不是变量所引用的实体。 例5
Page 21
§5.5 对象的组合
一个类可以把对象作为自己的成员变量,如 果用这样的类创建对象,那么该对象中就会有其 它对象,也就是说该对象将其他对象作为自己的 组成部分,或者说该对象是由几个对象组合而成 。 例4-7

Page 10
§5.2.6
类的UML图
UML(Unified Modeling Language Diagram)图 属于结构图,常被用于描述一个系统的静态结构 。一个UML中通常包含有类(Class)的UML图, 接口(Interface)的UML图以及泛化关系 (Generalization)的UML图、关联关系 (Association)的UML图、依赖关系 (Dependency)的UML图和实现关系 Lader (Realization)的UML图。 +above:float

5类和对象(上)

5类和对象(上)


类在不同包中,如果去掉A类的public声明,test类能否 使用A类?
test.java
package examples.ch2; import examples.ch1.A; public class test { public static void main(String args[]) { A a=new A(); a.f1(); A.java } package examples.ch1; } public class A { public void f1() { System.out.println("f1 called"); } }
当想要使用包中的类的时候,可以用 import命令告诉编译器类在哪里。
import <pkg_name>[.<sub_pkg_name>].<class_name | * >; test.java
另一种形式:import examples.ch1.*; 情况2解决: 表示导入一个包中的所有类 package examples.ch2; import examples.ch1.A; public class test { public static void main(String[] args) { A a=new A(); a.f1(); } }
}
public String getXM() { return XM; } public int getAge() { return AGE; } public String getGZDW() { return GZDW; }
功能:定义对象,对象的属性进行初始化
public class test { public static void main(String[] args) { GF gf1=new GF("小章", 30, "好莱坞"); GF gf2=new GF("小赵", 32); System.out.println(gf1.getXM()); System.out.println(gf2.getAge()); } } 思考一个问题: GF gf=new GF();还可用吗?

5 类和对象(一)

5 类和对象(一)

类的定义
2. 成员方法
(1) 成员方法的定义 成员方法的定义: 方法名([参数类型 修饰符 返回类型 方法名 参数类型 参数 名,…]) { //方法体 方法体 } (2) 成员方法的调用: 成员方法的调用: 实例名.成员方法名 实例名 成员方法名
类的定义
【例题】定义一个Cat类。 例题】定义一个 类
综合应用实例
设计一个关于时间的类( 设计一个关于时间的类(Time类) 类 访问权限 private private private public public public 类型 int int int int int int 成员 hour minute second Hour Minute Second 说明 字段 字段 字段 属性 属性 属性
综合应用实例
访问权限 private public public public public public void void 类型 void 成员 setTime() Time() Time(int h) 说明 设置时间 构造方法 构造方法
Time(int h,int m,int 构造方法 s) ToString24() ToString12() 用24小时制输出 小时制输出 时间 用12小时制输出 小时制输出 时间
综合应用实例
class Time { private int hour; private int minute; private int second; private void SetTime(int h, int m, int s) { hour = h; minute = m; second = s; } public Time() { SetTime(0,0,0); } public Time(int h) { SetTime(h,0,0); }

5类和对象下

5类和对象下
return ((x >= 0) ? x : -x); }
如果还要求其它类型的 绝对值,就需要定义更 多的方法,这对于调用 者来说,将会是非常麻 烦的事情。
public static void main(String[] args) { AbsoluteValue obj = new AbsoluteValue(); int a = -8, b; b = obj.absOfInt(a); System.out.println(a + "的绝对值是" + b);
” 如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他 们就是为windows写程序,而不是为Sun的设备写程序” ——Scott McNealy(Sun首席执行官)
” 如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他 们就是为windows写程序,而不是为Sun的设备写程序” ——Scott McNealy(Sun首席执行官)
只有返回值不同的方法不能构成重载。
/*错误的方法重载*/ void fun(int x) {……}; int fun(int x) {……};
” 如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他 们就是为windows写程序,而不是为Sun的设备写程序” ——Scott McNealy(Sun首席执行官)
方法重载示例
public class AbsoluteValue { public int abs(int x) { return ((x >= 0) ? x : -x); } public float abs(float x) { return ((x >= 0) ? x : -x); } public double abs(double x) { return ((x >= 0) ? x : -x); } public long abs(long x) { return ((x >= 0) ? x : -x); }

C++程序设计练习题及答案第五章类与对象

C++程序设计练习题及答案第五章类与对象

第5章类与对象5.1 选择题1. 在下列结构变量的定义中,不正确的是( d )。

(a) struct employee{ char name[ 20 ] ;long code ;} emp ;(b) struct{ char name[ 20 ] ;long code ;} emp ;(c) struct employee{ char name[20];long code;} ;employee emp;(d) struct{ char name[20];long code;} employee;employee emp;2.已知有职工情况结构变量emp定义为:struct employee{ char name[ 20 ] ;long code ;struct{ int year ;int month ;int day ;} birth ;} emp ;下列对 emp 的 birth 正确赋值方法是( d )。

(a) year = 1980 ; month = 5 ; day = 1 ;(b) birth.year = 1980 ; birth.month = 5 ; birth.day = 1 ;(c) emp.year = 1980 ; emp.month = 5 ; emp.day = 1 ;(d) emp.birth.year = 1980 ; emp.birth.month = 5 ; emp.birth.day= 1 ;3.假定有以下声明和定义,则下面引用形式错误的是( b )。

1struct student{ int num ;float score ;} stu[3] = {{1001,80},{1002,75},{1003,91}}, *p = stu ; (a) p->num (b) (p++).num (c) (p++)->num (d) (*p).num4.下列四个运算符中,优先级最低的是( a )。

类和对象的定义和使用【优质】

类和对象的定义和使用【优质】

类和对象的定义和使用【类和对象的基本概念】“什么是类?”对于这个问题我相信一个从事C++不久的人并不能够一下子解答出来,但其实它却是一样很好描述的东西。

类其实就是类型。

要了解类,我们首先就需要知道什么是对象。

对象其实就是某一个具体的实体。

例如一个杯子,一个苹果,这些具体的事物,我们将它们称之为一个具体的对象。

在现实生活中,我们是需要对自己的物品进行整理的,如果我们不进行整理,就会显得非常的乱,而当我们需要找寻某一件东西的时候也会变得很难找。

所以我们对于这些东西(也就是对象)需要有一个行之有效的管理策略,也就是分类了。

而类型就是这样因运而生的。

所谓的类其实就是一个类型。

通常我们会将某一个对象归结为某一类型的对象。

例如一个杯子其实就是一个/杯子类型的/具体对象(请阅读时注意断句)一个苹果其实就是一个苹果类型的具体对象……按照这样的逻辑我们可以得出来一个最基本的结论。

类型是抽象的,它泛指一类相同的事物,而对象是形象的,也可以说是具体的,它指代一样具体的东西。

【属性和方法】每一类事物都会有一些固定的或者不定的特征,用于描述这些特征的信息我们称之为属性。

在C++中属性通常是指存储属性的变量,也叫成员变量。

例如我们可以描述某一个学生的信息有学号、姓名、年龄等,这些就是学生类型的属性。

(因为每一个学生都会有这些属性)方法是针对属性的操作,简而言之就是使用某一个类中属性的具体方法,通常我们会在类中使用函数来体现(函数的实现过程其实就是使用编程语言描述事物处理方法的过程),这一类的函数我们称之为成员函数,也叫成员方法。

在C++中,一个类就是由不定量的成员方法和属性构成。

【访问权限】访问权限是每一个面向对象语言(OOL)都会有的一个特色,它通过某一些固定的关键字能够给类中的成员指定外部人员的访问权限。

通常较多的是public (公有的)、private(私有的)以及protected(保护的)。

下面我们可以将一个类想象成一个人,了解一下这些关键字的含义:public(公有的),顾名思义就是所有的人都可以自由使用的一些资源,无论是这个类本身还是除了这个类外的其他代码都可以自由地对这个类中的公有资源进行访问和操作,不受任何限制。

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

首先,不得不说,我无法达到抛开类和对象的概念来看Javascript的境界,对于Javascript 是否是面向对象的说法有很多,不过我最认同的还是Javascript是一种“基于prototype 的面向对象语言”。

面向对象语言三大特点:继承,多态,封装,这三点虽然Javascript没有提供天然的语法实现,但是我们都可以通过prototype等技巧来实现,因此这种说法似乎不过分。

在Javascript中,构造对象有三种方式:
1. 首先,我们要明确一个概念,Javascript是一种弱类型的语言,一方面体现在Javascript的变量,返回类型都是没有强类型约束的,另一方面,Javascript可以为对象任意添加属性和方法。

根据这个,我们可以写出这样的代码:
这里的person就是我们构造出的一个对象。

2. 我们也可以利用JSON的形式来构造一个对象。

这个是不是很像我们在C#3.0里提出的匿名对象呢?
不同的是在Javascript中,函数是一种类型,所以可以赋给某个变量,但是C#不可以。

但是上面两种方法我们看到,我们都是单独定义了一个对象。

接下来让我们把他们抽象出来成为一个类。

可是在这里,我们看到,属性都已经被写死了,我们根本没办法为每个对象单独订制,解决办法很简单:
好,我们来对比一下第二种和第三种写法,两者是等效的。

在第二种写法中,实际上是构建了一个JSON对象,而我们又知道JSON本质上其实就是一个键值对,那么我们是否也可以用同样的方式来理解一个对象呢?
我们来写出这样的测试代码试试:
这样的代码没偶任何问题,首先用遍历的方式来找到person所有的key(属性和方法名)。

然后我们用索引的方式来访问person对象的name属性。

这些都没有问题,可是我们是不是看到了一个引申的问题,从传统面向对象的语言来看,name和age应该属于私有变量,那么这样用person简简单单的访问,是不是破坏了封装性呢?
还记得我们在前文中说过的么?var的叫变量,没有var的叫属性。

那么我们如果讲代码改成这个样子。

这样就可以封装得很好了,这也是在Javascript中的封装方式。

好,关于Javascript的类和对象就说到这,但是这里面仍然有一些问题。

我们会在下文中提及。

相关文档
最新文档