第4章 类与对象2
一、选择题 1定义类头时,不可能用到的关键字是()。 A) class B)private C)extends D)public 2.下列类定义中,不正确的是()。 A) class x { .... } B) class x extends y { .... } C) static class x implements y1,y2 { .... } D) public class x extends Applet { .... } 3.下列类头定义中,错误的是()。 A)public x extends y {...} B) public class x extends y {...} C)class x extends y implements y1 {...} D)class x {...} 4.设A为已定义的类名,下列声明A类的对象a的语句中正确的是( )。 A) float A a; B) public A a=A( ); C) A a=new int( ); D) static A a=new A( ); 5.设A为已定义的类名,下列声明A类的对象a的语句中正确的是()。 A) public A a=new A( ); B) public A a=A( ); C) A a=new class( ); D) a A; 6.设X 、Y均为已定义的类名,下列声明类X的对象x1的语句中正确的是()。 A) public X x1= new Y( ); B) X x1= X ( ); C) X x1=new X( ); D) int X x1; 7.设X 、Y为已定义的类名,下列声明X类的对象x1的语句中正确的是()。 A) static X x1; B) public X x1=new X(int 123); C) Y x1; D) X x1= X( ); 8.通过类MyClass中的不含参数的构造方法,生成该类的一个对象obj,可通过以下语句实现:_______________________________。 9. 设i , j为类X中定义的int型变量名,下列X类的构造方法中不正确的是( )。 A) void X(int k ){ i=k; } B) X(int k ){ i=k; } C) X(int m, int n ){ i=m; j=n; } D) X( ){i=0;j=0; } 10. 有一个类A,以下为其构造方法的声明,其中正确的是( )。 A)public A(int x){...} B)static A(int x){...} C)public a(int x){...} D)void A(int x){...} 11.有一个类A,以下为其构造方法的声明,其中正确的是( )。 A)void A(int x){...} B)A(int x){...} C)a(int x){...} D)void a(int x){...} 12.设i、j、k为类X中定义的int型变量名,下列类X的构造方法中不正确的是( )。 A) X( int m){ ... } B) void X( int m){ ... } C) X( int m, int n){ ... } D) X( int h,int m,int n){ ... } 13. 设i , j为类X中定义的double型变量名,下列X类的构造方法中不正确的是( )。 A) double X(double k ){ i=k; return i; } C) X( ){i=6;j=8; } B) X(double m, double n ){ i=m; j=n; } D) X(double k ){ i=k; }
类和对象2 (3)
练习题目: 使用面向对象的思想描述游戏中的怪物 问题描述: 某公司要开发新游戏,请用面向对象的思想设计怪物类,设定属性包括:怪物名字、生命值、攻击力、防御力;方法包括:攻击的方法,防御的方法. 要求: 1、通过构造函数实现属性赋值 2、攻击方法,描述攻击状态。内容包括怪物名字,生命值,攻击力 3、防御方法通过输入参数接收攻击力。需要判断,如果攻击力小于防御力,伤害值=0;反之伤害值=攻击力-防御力根据伤害值情况,显示不同的防御信息。内容包括怪物名字,防御力,防御后的生命值. 4、编写测试方法,通过构造函数实例化怪物类的对象,并调用相关方法(测试数据信息自定) 运行效果:
练习题目: 使用面向对象的思想描述班级和学员信息 问题描述: 某公司要开发“学员管理系统”,请使用面向对象的思想,描述班级和学员信息 要求: 1、分析班级和学员的属性和方法,设计班级类和学员类 2、在学员类中通过属性描述所在班级 3、通过带参构造函数实现属性赋值 4、编写测试方法实现信息输出 参考分析思路: 班级类: 属性:班级编号,班级名称 方法:介绍班级信息的方法。通过输入参数描述班级口号,介绍信息中包括编号、名称
学员类: 属性:学号,姓名,性别,年龄,所在班级 方法:学习的方法,描述学习状态。描述内容包括姓名、学号、 年龄、所在班级信息 运行效果: 要求将加减乘除的方法改写成带参方法,在定义一个运算方法ope(),接收用户选择的运算和两个数字,根据用户选择的运算计算结果。运行如图所示: 提示:定义方法ope(),参考如下: public int ope(int op,int num1,int num2){
实验二 类和对象的使用_参考答案
实验二类和对象的使用 班级:学号:姓名:成绩: 一.实验目的 1.掌握类和对象的概念、定义和使用方法。 2.掌握不同特性对象成员的访问方法。 二.使用的设备和仪器 计算机+Windows XP +Visual C++6.0 三.实验内容及要求 1.定义一个Book类,在该类定义中包括以下数据成员和成员函数: 数据成员:bookname(书名)、price(价格)、number(存书数量) 成员函数:set()输入图书信息;display()显示图书的情况;borrow()将存书数量减1,并显示当前存书数量;restore()将存书数量加1,并显示当前存书数量。 在主函数中,要求创建某一图书对象,并对该图书进行简单的显示、借阅和归还等管理。 2.定义一个中国好声音歌手类。其中,包括每个歌手的名字、年龄、来自哪个省份、所唱的曲目等。可以实现报名、显示、修改等功能。 3.定义一个时间类,实现课堂中第五节中的例2.2。 数据成员:时、分、秒 成员函数:输入时间、设置时间、按12小时制显示时间、按24小时制显示时间、增加1小时、减少1小时等功能。 4.定义一个学生类Student,要求如下: (1)数据成员包括学号、姓名、数学成绩、英语成绩和C++成绩;要求对所输入的成绩的合法性进行判断。 成员函数包括:设置学生的信息函数;输入学生的信息函数;输出学生的信息函数; 计算学生平均成绩的函数。 (2)添加新的数据成员:出生年月日;实现多个学生信息的添加、成绩的修改(一次只能修改一科成绩)等功能。要求单独定义一个日期类,并对所输入的出生年月日的合法性进行判断。 (3)设计一个菜单函数。 ****************************************************************** * * * 1.添加 2.设置 3.显示 4.修改成绩 5.计算平均分0.退出* * *
【习题】类与对象(2)
类和对象(2) 【实验目的】: 1. 掌握类的构造函数和析构函数的使用方法。 2. 掌握类的拷贝构造函数的使用方法。 【实验内容】: 1.读以下程序,为下列程序添加注释,并给出程序运行结果。并解释为什么得到这样的结 果。上机验证你的结果是否正确。 2. 完成下列要求。
1) 读以下程序,为下列程序添加注释,并给出程序运行结果。并解释为什么得到这样的结 果。上机验证你的结果是否正确。 2) 将Coordinate 类中带有两个参数的构造函数进行修改,在函数体内添加下述语句: cout << “Constructor is called.\n “; 写出程序的运行结果,并解释输出的结果。 3) 按下列要求进行调试:在主函数体内,添加下述语句: Coordinate p4; Coordinate p5(2); 调试程序时会出现什么错误?为什么?如何对已有的构造函数进行适当的修改? 4) 经过以上2)和3)步的修改后,结合运行结果分析:创建不同的对象时会调用不同的构造 函数。
□ Bine 1 udr< i n>? t 「?豪 nA Uflnf Z ?M!|J*(^ 3.(4; Ma 名% DiDniiriitft^tr < public: CDftrdinatfflnlr wl.iftt ?1)>7尸诵魯;詐杠话巧筑 X-K.1 i r/; mot << "C-anWriiirtBr i<; callf i d An*1; 、 Coord indtc (O OHHTI I imitvCi p) M"托口 构這函魏 ^Cwr Ji Mt? <) {eflirt s CeinriiinLdi-r;: Coo r flin^i t p( £nt; Covrdin.ilr 闷7*的;M 丘ff if ■—介/■■-歆卜咗1洁> 牌 cout^C k |ii-(*<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:
从C到ObjectiveC类和对象续修订稿
从C到O b j e c t i v e C类 和对象续 集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-
从 C++ 到 Objective-C(4):类和对象(续) 作者:日期: 2011 年 03 月 19 日(9) 方法 Objective-C 中的方法与 C++ 的函数在语法方面风格迥异。下面,我们就来讲述 Objective-C 的方法。 原型、调用、实例方法和类方法 以–开头的是实例方法(多数情况下都应该是实例方法); 以 + 开头的是类方法(相当于 C++ 里面的 static 函数)。 Objective-C 的方法都是 public 的; 返回值和参数的类型都需要用小括号括起来; 参数之间使用冒号:分隔; 参数可以与一个标签 label 关联起来,所谓标签,就是在 : 之前的一个名字。标签被认为是方法名字的一部分。这使得方法 比函数更易读。事实上,我们应该始终使用标签。注意,第一个 参数没有标签,通常它的标签就是指的方法名; 方法名可以与属性名相同,这使 getter 方法变得很简单。 C++ // 原型 void Array::insertObject(void*anObject, unsigned int atIndex); // shelf 是 Array 类的一个实例,book 是一个对象
shelf.insertObject(book, 2); Objective-C(不带 label,即直接从 C++ 翻译来) // 方法原型 // 方法名字是“insertObject::” // 这里的冒号:用来分隔参数,成为方法名的一部分(注意,这不同于C++ 的域指示符::) -(void) insertObject:(id)anObject:(unsigned int)index // shelf 是 Array 类的一个实例,book 是一个对象 [shelf insertObject:book:2]; Objective-C(带有 label) // 方法原型。“index” 有一个标签“atIndex” // 方法名为“insertObject:atIndex:” // 这样的话,调用语句就很容易阅读了 -(void) insertObject:(id)anObject atIndex:(unsigned int)index // shelf 是 Array 类的一个实例,book 是一个对象 [shelf insertObject:book:2]; // 错误! [shelf insertObject:book atIndex:2]; // 正确 注意,方括号语法不应该读作“调用 shelf 对象的 insertObject 方法”,而应该是“向 shelf 对象发送一个 insertObject 消息”。这是Objective-C 的实现方式。你可以向任何对象发送任何消息。如果目标对象不能处理这个消息,它就会将消息忽略(这会引发一个异常,但不
类与对象的复习与练习
一选择题 1.下面方法定义中,正确的是: A)int x(int a,b){return a-b;} B)double x(int a,int b){int w;w=a-b;} C)double x(a,b){return b;} D)int x(int a,int b){return a-b;} 2.下面方法定义中,不正确的是: A)float x(int a,int b){return a-b;} B)int x(int a,int b){return a-b;} C)int x(int a,int b){return a*b;} D)int x(int a,int b){return 1.2*(a-b);} 3下面方法定义中,正确的是: A)int x(){char ch='a';return (int)ch;} B)void x(){return true;} C)int x(){return true;} D)int x(int a,b){return a-b;} 4设X 、Y 均为已定义的类名,下列声明类X的对象x1的语句中正确的是? X x1=new X(); B)X x1= X ( ); C)X x1=new Y( ); D)int X x1; 5设A为已定义的类名,下列声明并创建A 类的对象a的语句中正确的是?
A)A a=new A( ); B)public A a=A( ); B)C)A a=new class( ); D)a A; 6下面类的定义中结构正确的是? A)class A B)class 2A C)int class A D)public class A () 7下面关于类的结构的说法正确的是? A)类只能包含一个构造方法 B)类可以没有属性 C)类只能包含方法 D)类只能包含属性 8下面哪个关键字在定义类头时用不到? A)class B)public C)extends D)int33 9 this在程序中代表的是? A)类的对象 B)属性 C)方法 D)父类 10下列对构造方法的调用方式的描述中正确的是? A)使用new调用 B)使用类名调用 C)使用对象名调用
c类和对象练习题
c类和对象练习题 Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#
第8章类与对象 8.1知识要点 1.掌握类与对象的概念和定义方法,掌握类成员的访问属性。 2.掌握构造函数的概念、定义方法和使用方法。 3.掌握析构函数的概念、定义方法和使用方法。 4.掌握拷贝构造函数的概念、定义方法和使用方法。 5.掌握包含对象成员的类构造函数的定义方法。 6.掌握静态成员的概念、定义方法、作用和特点。 7.掌握友元的概念、定义方法、作用和特点。 8.掌握类模板的定义格式与使用方法。 8.2典型例题分析与解答 例题1:下列有关类的说法不正确的是()。 A.对象是类的一个实例 B.任何一个对象只能属于一个具体的类 C.一个类只能有一个对象 D.类与对象的关系和数据类型与变量的关系相似 答案:C 分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。 例题2:下面()项是对构造函数和析构函数的正确定义。 A.void X::X(), void X::~X() B.X::X(参数),X::~X() C.X::X(参数),X::~X(参数) D.void X::X(参数),void X::~X(参数) 答案:B 分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。 例题3:()的功能是对象进行初始化。 A.析构函数B. 数据成员 C.构造函数 D.静态成员函数 答案:C 分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作; 例题4:下列表达方式正确的是()。 A.class P{B.class P{ public: public: int x=15; int x; voidshow(){cout<类与对象答案
类与对象 知识要点 1.掌握类与对象的概念和定义方法,掌握类成员的访问属性。 2.掌握构造函数的概念、定义方法和使用方法。 3.掌握析构函数的概念、定义方法和使用方法。 4.掌握拷贝构造函数的概念、定义方法和使用方法。 5.掌握包含对象成员的类构造函数的定义方法。 6.掌握静态成员的概念、定义方法、作用和特点。 7.掌握友元的概念、定义方法、作用和特点。 8.掌握类模板的定义格式与使用方法。 典型例题分析与解答 例题1:下列有关类的说法不正确的是()。 A.对象是类的一个实例 B.任何一个对象只能属于一个具体的类 C.一个类只能有一个对象 D.类与对象的关系和数据类型与变量的关系相似 答案:C 分析:对象是类的一个实例,类与对象的关系和数据与变量的关系相似,所以一个类可以有多个对象。 例题2:下面()项是对构造函数和析构函数的正确定义。 A.void X::X(), void X::~X() B.X::X(参数), X::~X() C.X::X(参数), X::~X(参数) D.void X::X(参数), void X::~X(参数) 答案:B 分析构造函数无返回类型、可带参数、可重载;析构函数无返回类型、不可带参数、不可重载。 例题3:()的功能是对象进行初始化。 A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数 答案:C 分析:当一个对象定义时,C++编译系统自动调用构造函数建立该对象并进行初始化;当一个对象的生命周期结束时,C++编译系统自动调用析构函数注销该对象并进行善后工作; 例题4:下列表达方式正确的是()。 A.class P{ B. class P{ public: public: int x=15; int x; void show(){cout<实验二 类与对象
实验二类与对象 一、实验目的 1、学习类与对象的定义,掌握类与对象的使用方法。 2、学习数据成员与成员函数的访问方式,理解构造函数和析构函数的定义与执行过程,学会构造函数的重载方法。 3、掌握数组与指针的定义与使用方法,理解数组与指针的存储分配与表示。 4、掌握用指针和引用向函数传递参数。 5、掌握静态数据成员和静态成员函数的使用。 6、理解友元与友元函数的作用与使用方法。 二、实验内容 1、下面是一个计算器类的定义,请完成该类成员函数的实现。 class Counter { public: Counter(int number); void increment(); //给原值加1 void decrement(); //给原值减1 int getValue(); //取得计数器值 int print(); //显示计数 private: int value; }; #include class count { public: counter(int number); void increment(); void decrement(); int getvalue(int); int print();
private: int value; }; void count::increment() { int a=value+1; } void count::decrement() { int b=value-1; } int count::getvalue(int s) { value=s; return 0; } int count::print() { cout<类和对象
6.1实验目的和要求 1.熟悉面向对象的基本概念。 2.进一步掌握类的各种成员的使用方法。 3.掌握对象之间通信的基本方法。 6.2实验内容与步骤 题目1 点和直线类 (1)创建C#控制台应用程序L6_1。 (2)在程序中新建一个点类CzPoint,为其定义两个double类型的私有字段成员x和y,分别表示点的横坐标和纵坐标。 (3)为CzPoint定义两个公有属性X、Y,分别用于封装对字段x 和y的读写访问。 (4)定义CzPoint的带参构造函数,在其中对字段x和y进行初始化。参考源代码如下: public CzPoint(double x, double y) { this.x = x; this.y = y;
} (5)为CzPoint定义公有方法Move,用于按指定的水平距离和垂直距离移动坐标点。参考源代码如下: public void Move(double dx, double dy) { x += dx; y += dy; } (6)对CzPoint类进行相等和不相等操作符重载。两个坐标点相等,是指它们的横坐标和纵坐标都相等。 (7)在程序主方法中创建坐标为(1,2)和(3,3)的两个坐标点对象,判断它们是否相等;而后将第一个坐标点移动到第二个坐标点上,再判断它们是否相等。 (8)在程序中再新建一个直线类CzLine,为其定义两个double类型的字段成员a和b,分别表示直线的斜率和截距;再定义字段的封装属性A和B,但它们都是只读的。
(9)为CzLine定义两个构造函数,一个根据斜率和截距来创建直线对象,另一个则根据两个CzPoint对象来构造直线对象(直线穿过这两个点)。后一个的参考源代码如下: public CzLine(CzPoint p1, CzPoint p2) { if (p1 == p2) throw new ArgumentException("两点不能相同"); this.a = (p2.Y - p1.Y) / (p2.X - p1.X); this.b = p1.Y - this.a * p1.X; } (10)为CzLine定义公有方法Move,但它只用于平移直线,而不改变直线的斜率。再为其定义公有方法Contains,用于判断某点是否在该直线上。 (11)类似的,为CzLine重载相等和不等操作符。 (12)最后在程序主方法中采用不同的方式创建直线对象,并编译运行程序,测试它们的使用效果。 程序的整体结构如下: