搜档网
当前位置:搜档网 › 类与对象

类与对象

类与对象
类与对象

类与对象

知识要点

1.掌握类与对象的概念和定义方法,掌握类成员的访问属性。

2.掌握构造函数的概念、定义方法和使用方法。

3.掌握析构函数的概念、定义方法和使用方法。

4.掌握拷贝构造函数的概念、定义方法和使用方法。

5.掌握包含对象成员的类构造函数的定义方法。

6.掌握静态成员的概念、定义方法、作用和特点。

2典型例题分析与解答

1:下列有关类的说法不正确的是()。

A.对象是类的一个实例

B.任何一个对象只能属于一个具体的类

C.一个类只能有一个对象

D.类与对象的关系和数据类型与变量的关系相似

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(参数)

3:()的功能是对象进行初始化。

A.析构函数 B. 数据成员 C.构造函数 D.静态成员函数

4:下列表达方式正确的是()。

A.class P{ B. class P{

public: public:

int x=15; int x;

void show(){cout<

C. class P{ D. class P{

int f; public:

}; int a;

f=25; void Seta (int x)

{a=x;}

}

5:拷贝构造函数具有的下列特点中,()是错误的。

A.如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的

B.拷贝构造函数只有一个参数,并且是该类对象的引用

C.拷贝构造函数是一种成员函数

D.拷贝构造函数的名字不能用b类名

6:关于静态成员的描述中,()是错误的。

A.静态成员可分为静态数据成员和静态成员函数

B.静态数据成员定义后必须在类体内进行初始化

C.静态数据成员初始化不使用其构造函数

D.静态数据成员函数中不能直接引用非静态成员

7:关于友元的描述中,()是错误的。

A.友元函数是成员函数,它被说明在类体内

B.友元函数可直接访问类中的私有成员

C.友元函数破坏封装性,使用时尽量少用

D.友元类中的所有成员函数都是友元函数

8:设有如下程序结构:

class Box

{ … };

void main()

{Box A,B,C; }

该程序运行时调用(1) 次构造函数;调用(2) 次析构函数。

9:设A为test类的对象且赋有初值,则语句test B(A); 表示。10:利用“对象名.成员变量”形式访问的对象成员仅限于被声明为(1) 的成员;若要访问其他成员变量,需要通过(2) 函数。

11:分析找出以下程序中的错误,说明错误原因,给出修改方案使之能正确运行。

#include

class one

{ int a1,a2;

public:

one(int x1=0, x2=0);

};

void main()

{one data(2,3);

cout<

cout<

}

12:分析以下程序的错误原因,给出修改方案使之能正确运行。

#include

class Amplifier{

float invol,outvol;

public:

Amplifier(float vin,float vout)

{invol=vin;outvol=vout;}

float gain();

};

Amplifier::float gain() { return outvol/invol; }

void main()

{ Amplifier amp(5.0,10.0);

cout<<"\n\nThe gain is =>"<

}

13:下列程序的运行结果是。

#include

class point

{ int x,y;

public:

point(int a,int b)

{x=a;y=b;

cout<<"calling the constructor function."<

}

point(point &p);

friend point move(point q);

~point(){cout<<"calling the destructor function.\n";}

int getx() {return x;}

int gety() {return y;}

};

point::point(point &p)

{x=p.x; y=p.y;

cout<<"calling the copy_initialization constructor function.\n";

}

point move(point q)

{cout<<"OK!\n";

int i,j;

i=q.x+10;

j=q.y+20;

point r(i,j);

return r;

}

void main()

{ point m(15,40),p(0,0);

point n(m);

p=move(n);

cout<<"p="<

}

14:定义一个学生类,其中有3个数据成员:学号、姓名、年龄,以及若干成员函数。同时编写main函数使用这个类,实现对学生数据的赋值和输出。

15:计算两点之间的距离。

方法:可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。

3教材习题分析与解答

1.选择题

(1)对类的构造函数和析构函数描述正确的是()。

A.构造函数可以重载,析构函数不能重载

B.构造函数不能重载,析构函数可以重载

C.构造函数可以重载,析构函数也可以重载

D.构造函数不能重载,析构函数也不能重载

(2)类的析构函数的作用是( D )。

A.一般成员函数

B.类的初始化

C.对象初始化

D.删除对象

(3)假设OneClass为一个类,则该类的拷贝初始化构造函数的声明语句为()。

A.OneClass(OneClass p);

B. OneClass& (OneClass p);

C. OneClass(OneClass & p);

D. OneClass (OneClass *p);

(4)下面对于友元函数描述正确的是()。

A.友元函数的实现必须在类的内部定义

B.友元函数是类的成员

C.友元函数破坏了类的封装性和隐藏性

D.友元函数不能访问类的私有成员

(5)对于结构中定义的成员,其默认的访问权限为()。

A.public

B. protected

C.private

D. static

(6)为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为()。

A.public

B. protected

C.private

D. static

(7)下面对静态数据成员的描述中,正确的是()。

A.静态数据成员可以在类体内进行初始化

B.静态数据成员不可以在类体内进行初始化

C.静态数据成员不能受private控制符的作用

D.静态数据成员可以直接用类名调用

(8)下面对静态数据成员的描述中,正确的是()。

A.静态数据成员是类的所有对象共享的数据

B.类的每一个对象都有自己的静态数据成员

C.类的不同对象有不同的静态数据成员值

D.静态数据成员不能通过类的对象调用

2.写出下列程序的运行结果。

(1)#include

class Point{

int x,y;

public:

Point(){x=1;y=1;}

~Point(){cout<<"Point "<

void main()

{Point a;}

(2) #include

#include

int count=0;

class Point

{ int x,y;

public:

Point()

{ x=1;y=1;

count++;

}

~Point() {count--;}

friend void display();

};

void display() { cout <<"There are "<

{ Point a;

display();

{ Point b[5];

display();

}

display();

}

(3)#include

class Csample

{ int i;

public:

Csample( );

void Display( );

~Csample();

};

Csample::Csample( )

{ cout<<”Constructor”<<”,”;

i=0;

}

void Csample::Display() {cout<<”i=”<

Csample::~Csample( )

{ cout<<”Destructor”<

void main( )

{ Csample a;

a.Display( );

}

(4) #include

#include

class Csample

{ int i;

public:

Csample() {cout <<"constructor1" <

Csample(int val) {cout <<"Constructor2"<

void Display()

{cout<<"i="<

~Csample()

{cout<<"Destructor"<

};

void main()

{Csample a,b(10);

a.Display();

b.Display();

}

(5)#include

class Csample

{private:

int i;

static int k;

public:

Csample( );

void Display( );

};

int Csample::k=0;

Csample::Csample( ) { i=0; k++; }

void Csample::Display( ) { cout<<”i=”<

{ Csample a,b;

a.Display( );

b.Display( );

}

3.按要求编写程序。

(1)编写一个程序,设计一个产品类Product,其定义如下:

class Product

{ char *name; //产品名称

int price; //产品单价

int quantity; //剩余产品数量

public:

product(char *n,int p int q); //构造函数

~product( ); //析构函数

void buy(int money); //购买产品

void get() const; //显示剩余产品数量

};

并用数据进行测试。

(2)计算两点之间的距离。

提示:可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。

(3)定义盒子Box类,要求具有以下成员:可设置盒子形状;可计算盒子体积;可计算盒子的表面积。

(4)定义计数器类Counter。要求具有以下成员:计数器值;可进行增值和减值记数;可提供记数值。

(5)编写一个程序计算两个给定的长方形的周长和面积。

(6)编写一个程序,采用一个类求n!,并输出10!的值。

(7)编写一个程序,设计一个Cdate类,它应该满足下面的条件:

1)用这样的格式输出日期:日-月-年;

2)输出在当前日期上加两天后的日期;

3)设置日期。

4 补充习题

1.选择题

(1) 下列有关类的说法不正确的是。

A.类是一种用户自定义的数据类型

B.只有类中的成员函数或类的友元函数才能存取类中的私有数据

C.在类中(用class定义),如果不作特别说明,所有的数据均为私有数据

D.在类中(用class定义),如果不作特别说明,所有的成员函数均为公有数据

(2) 以下有关析构函数的叙述不正确的是( )

A. 在一个类只能定义一个析构函数

B. 析构函数和构造函数一样可以有形参

C. 析构函数不允许用返回值

D. 析构函数名前必须冠有符号“~”

(3) 以下有关类与结构体的叙述不正确的是( )

A. 结构体中只包含数据;类中封装了数据和操作

B. 结构体的成员对外界通常是开放的;类的成员可以被隐藏

C. 用struct不能声明一个类型名;而class可以声明一个类名

D. 结构体成员默认为public;类成员默认为private

(4) 以下叙述中不正确的是( )

A. 一个类的所有对象都有各自的数据成员,它们共享函数成员

B. 一个类中可以有多个同名的成员函数

C. 一个类中可以有多个构造函数、多个析构函数

D. 在一个类中可以声明另一个类的对象作为它的数据成员

(5) 以下不属于构造函数特征的是( )

A. 构造函数名与类名相同

B. 构造函数可以重载

C. 构造函数可以设置默认参数

D. 构造函数必须指定函数类型

(6) 以下有关类和对象的叙述不正确的是( )

A. 任何一个对象都归属于一个具体的类

B. 类与对象的关系和数据类型与变量的关系相似

C. 类的数据成员不允许是另一个类的对象

D. 一个类可以被实例化成多个对象

(7) 设有定义:

class person

{ int num;

char name[10];

public:

void init(int n, char *m);

...

};

person std[30];

则以下叙述不正确的是( )

A. std是一个含有30个元素的对象数组

B. std数组中的每一个元素都是person类的对象

C. std数组中的每一个元素都有自己的私有变量num和name

D. std数组中的每一个元素都有各自的成员函数init

(8) 设有以下类的定义:

class Ex

{ int x;

public:

void setx(int t=0);

};

若在类外定义成员函数setx(),以下定义形式中正确的是( )

A. void setx(int t) { ... }

B. void Ex::setx(int t) { ... }

C. Ex::void setx(int t) { ... }

D. void Ex::setx(){ ... }

(9) 以下关于静态成员变量的叙述不正确的是()

A.静态成员变量为类的所有对象所公有

B.静态成员变量可以在类内任何位置上声明

C.静态成员变量的赋初值必须放在类外

D.定义静态成员变量时必须赋初值

(10) 定义静态成员函数的主要目的是()

A.方便调用B.有利于数据隐藏

C.处理类的静态成员变量D.便于继承

(11) 以下叙述不正确的是()

使用静态数据成员:

A.可以节省内存空间B.是为了解决数据共享问题

C.可以直接用类名来引用 D.可以提高序运算速度

2.填空题

(1) OOP技术由、、方法、消息和继承五个基本的概念所组成。

(2)(2)类的成员函数可以在定义,也可以在

定义。

(3)(3)类test的析构函数名是。

(4)(4)类是用户定义的类型,具有类类型的变量称作_______________。

(5)(5)一个类的析构函数不允许有。

(6)(6)建立对象时,为节省内存,系统只给_______分配内存。

(7)(7)用于定义C++的类的关键字有____________、___________和union。

(8)(8)类test的构造函数是和_______同名的函数,析构函数是__________。

(9)(9)类中的数据和成员函数默认访问类型为。

(10)(10)当建立一个新对象时,程序自动调用_______________。

3. 改错题

(1) 下面的程序定义了一个Point类,找出程序中的错误语句并改正。

#include

class Point{

int x;

public:

void Point(int a)

{x=a;}

int Getx(){return x;}

void Show()

{cout<

} ;

void main()

{Point A(76);

cout<

}

(2) 根据静态成员的特点,指出下列程序的错误。

#include

#include

class part

{ public:

Part(char *pnam e=”no name”)

{ strncpy(name,pname);

noofpart++;

no=noofpart;

cout<<”create the no: ”<

}

~Part()

{ noofpart--;

cout<<”destroy the no: ”<

}

static int number() { return no; }

protected:

static int noofpart=0;

int no;

char name[40];

};

void main()

{ Part p1;

Part p2;

}

(3) 以下程序的功能是:利用友员函数为类的成员变量进行初始化,然后利用成员函数输出。请改正程序中的错误,使之能正确运行。

#include

class A

{ int a,b;

public:

friend void setval(int i,int j);

void showA()

{cout<

};

void setval(int i,int j)

{a=i; b=j;}

void main()

{A obj1;

setval(2,3);

obj1.showA();

}

4. 看程序写结果

(1) #include

class test

{ public:

test();

test(int);

~test();

void display();

protected:

int n;

};

test::test() {cout<<”Constructing normally\n”;}

test::test(int num)

{n=num;

cout<<”Constructing with a number: ”<

}

void test::display() {cout<<”Display a number: ”<

test::~test(){cout<<”Destructing”<

void main()

{ test obj1;

test obj2(59);

obj1.display();

obj2.display();

}

(2) #include

class Count

{ public:

Count() { count++;}

static int getn() {return count;}

~Count() { count--; }

private:

static int count;

};

int Count::count=100;

void main()

{ Count c1,c2,c3,c4;

cout<

}

(3) #include

class myclass

{ int a,b;

public:

void init(int i, int j)

{a=i; b=j;}

friend int sum(myclass x);

};

int sum( myclass x)

{return x.a+x.b; }

void main()

{myclass y;

y.init(15,20);

cout<

}

5. 编程题

(1)某商店经销一种货物,货物成箱购进,成箱卖出,购进和卖出时以重量为单位,各箱的重量不一样,因此,商店需要记下目前库存货物的总量,要求把商店货物购进和卖出的情况模拟出来。

(2)定义一个Car类和Truck类,用友元实现两类对象行使速度的快慢比较。

类,对象,实例

这样子同你说吧。类,他就是讲的一个种类。不懂?OK,比如人类。 这个“人”他们都有思维,都有眼睛鼻子等等共同的特征。他就叫做一个类。叫做“人类”。 还有“植物类”,这个“植物”它们都有根,叶子等等共同的特征。它就叫做一个类。 “张三”是个人,他只是人类中的一个特例,我们就把他叫做一个具体的对象。也就是C#中的对象。 一句话说完了,类都是一群对象的集合,里面包含了N多的对象。而对象只是类的一个特例。比如学校里有1000个学生,然后校长在广播里面喊:请张三同学到校长室来一下。这时候“李四,王五,赵六”等等听到广播,就知道,校长叫的是张三,而不是自己。所以张三李四王五这些都是这个学生类的一些特例(也就是一个个对象),他们除了有眼睛鼻子思维这些共同的特征之外,还有其他不同的地方,例如名字就是不同的。这样子比较通俗了吧。 实例就是“张三”这个名字。比如Student stu = new Student();stu就是一个实例。这个stu他就已经被实例化了。表示他是这个Student类里的一个对象。new他是为了把他实例化,让电脑内存知道,现在已经存在一个这样的对象了,然后你就可以使用这个对象了。

我想大家都吃过月饼,不知可有人知道月饼是怎么做出来的。做月饼是用模具的,把配好的月饼陷放进模具里一磕,拿出来就是一个月饼了。做铁杯子是的要用模具的,把熔化的铁的液体放在铁杯的模具里,冷却后,出来就是铁杯子了。现在这个模具就有了类别的吧,做月饼的叫做月饼类模具,做铁杯的叫做铁杯类模具,程序中的类就和这个类是一个意思的。人类,植物类,猪类,狗类,猫类,猴子类。。。都和程序中的类是一个意思。可见,一个类就是一种东西,它和其他类的东西是不一样的,人类和猪类是一样的吗?说这类有何意义呢?大家都知道月饼类模具是做月饼的,这类的模具就是做月饼的,把原料放进模具不就能出来月饼吗?出来这个月饼,我们叫什么?就叫月饼!更高度点叫什么呢?叫对象! 记住啊,把月饼的料放进月饼的模具里,能做出来月饼,这个月饼就是对象!而把料放进模具里,到做出来这一个过程,我们就称为:对象的实例化! 至此我们要搞清三个问题: 一,类:就是那个月饼的模具 二,对象:就是那个月饼 三,对象的实例化:就是把料放进模具里到成品出来这一过程 那么这个类能吃吗?不能,因为它是模具啊,只有当实例化后我们才能吃这个类产生出来的对象也就是月饼。 程序中啊,我们说的类与对象其实都可以按上述比喻来类比的。 我们创造了一个类,也就相当于我们发明了一个模具,往往我们并不

第4章-Java语言与面向对象作业习题与答案

第4章 Java语言与面向对象作业习题与答案 一、简答题 1.什么是对象?什么是类? 对象是一种抽象数据类型。它包含了事物的静态特征(属性)和动态特征(行为)两大特征。 类是一组同种对象的集合与抽象。即是具有相同属性和方法的一组对象集合。 2.Java语言的单继承是指什么? 一个类可以派生出多个子类,但子类只允许有一个父类,而不允许存在多个父类。 3.在一个共有类中的数据成员及方法成员的访问控制符为缺省,则这个类可供什么样的包引用? 当一个类的访问控制符为public共有时,表明这个类作为整体对其它类是可见和可引用的;但其数据成员和方法成员访问控制符为缺省时,它们只能被包中类(含当前类)引用。 4.抽象类的用途 (1)设计在更高的层次上进行,不考虑具体对象,从而大大简化了处理问题的复杂性; (2)设计出的类也具有更加良好的可扩展性。 5.什么是非静态的成员变量? 非静态成员即为实例成员变量(没有加static修饰的变量)。 6.异常Exception和错误Error有什么不同?Java如何处理它们? 答:错误通常是指程序本身存在非法情形,常常是因为代码存在问题而引起的,如造成系统崩溃、虚拟机粗错、动态失败等,这一类错误无法恢复或不可能捕获,并将导致应用程序中断。 异常表示另外一种“非同寻常”的错误。这种错误通常是不可预测,但可以被捕获且可以恢复。常见的异常情况包括存不足、找不到所需文件等。 对于错误,编程人员可以通过对程序进行更仔细的检查,以避免这种错误。 对于异常,可以使用捕获机制进行捕获,再编写出相应的处理程序。 7.简单述Java的异常处理机制。 答:Java采取“抛出—捕获”的方式,一旦一个异常想象产生,Runnable环境和应用程序会抛出各种标准类型和自己定义的异常,系统就可以捕获这些异常,并一定有相应的机制来处理它,确保不会产生司机、死循环或其它对操作系统的损害,从而保证了整个程序运行的安全性。 8.简单述throw语句和throws关键字之间的差别。 答:throw语句是在一个方法中用来直接抛出异常对象,其格式是: throw 异常对象; throws关键字是用一个方法声明首部,用来指出这个方法中可能产生若干种异常,其格式:[方法修饰符] 返回类型方法名(参数表)throws 异常类型表 { /*方法体*/ } 二、填空题 1.所有Java应用程序都必须包含的一个类方法是 main() 。 2.面向对象程序设计语言的三种重要特性是封装性、继承性和多态性。

JAVA类和对象的关系

1、JAVA中的参数传递问题(理解内存图) 基本类型:形式参数的改变对实际参数没有影响 引用类型:形式参数的改变直接影响实际参数 2、面向对象(理解,升就业班问说说什么是面向对象和思想特点) 1、面向对象(从三点回答) A面向过程是以函数为基础,完成各种操作,强调的是过程 B面向对象以对象为基础,完成各种操作,强调的是对象,结果 C面向对象是基于面向过程的 2、面向对象的思想特点: a)是一种更符合人们思考习惯的思想 b)把复杂的事情简单化 c)把我们从执行者变成了指挥者 3、举例: a)买电脑 b)洗衣做饭 c)旅游 d)把大象装进冰箱(伪代码体现) 4、事物是如何体现的 a)属性有哪些特征名词提取法 b)行为有哪些功能 5、类与对象的关系(掌握) 把事物转换成类 A:成员变量 定义在类中,方法外 B:成员方法 和以前的区别是去掉static 把这个说完还没有说道类与对象的概念,对不对 类:是相关的属性和行为的集合,集合就是一堆东西,是一个抽象的概念 对象:是某种事物的具体的存在,具体的表现形式 举例: 学生:类 对象:小明 6、案例 A学生类 B手机类 C汽车类(在这里画了内存图,有空看一下) 7、如何使用呢 a)创建对象 i.格式 a)类名变量= new 类名() b)使用成员变量和成员方法

i.对象名.成员变量 ii.对象名.成员方法 8、成员变量和局部变量的区别(理解) A 定义位置 成员变量:在类中方法外 局部变量,在类中方法中,或者方法上的形式参数 B 初始化的区别 成员变量:有默认的初始化值 局部变量:无 C 存储位置 成员变量:堆随着对象的存在而存在 局部变量:栈随着方法的存在而存在 9、匿名对象 a)概念:没有名字的对象 b)使用场景 i.当对象中的方法只掉用一次的情况下使用(一般不用,测试时使用)new Student().sayHello(); ii.匿名对象作为实际参数传递

实验2 类和对象(一)

实验2 类和对象(一) 1、实验目的 (1)掌握声明类的方法,类和类的成员的的概念以及定义对象的方法。 (2)初步掌握用类和对象编制基于对象的程序。 (3)学习检查和调试基于对象的程序。 2、实验内容 (1)有以下程序: #include using namespace std; class Time //定义Time类 {public: //数据成员为公用的 int hour; int minute; int sec; }; int main( ) { Time t1; //定义t1为Time类对象 cin>>t1.hour; //输入设定的时间 cin>>t1.minute; cin>>t1.sec; cout<

JAVA类与对象及数组习题及答案

JAV A类和对象及数组习题 一、选择题 (1)下列构造方法的调用方式中,正确的是(D )--原因:在通过new实例化一个类对象时系统会自动调用该类相应的构造方法。 A.按照一般方法调用B.由用户直接调用 C.只能通过new自动调用D.被系统调用 (2)在Java中,能实现多重继承效果的方式是(C )--原因:一个类可以同时实现多个接口。Java接口反映了对象较高层次的抽象,还弥补了Java只支持单继承的不足,可用它来完成多继承的一些功能。 A.内部类B.适配器C.接口D.同步 (3)int型public成员变量MAX_LENGTH,该值保持为常数100,则定义这个变量的语句是( D )—原因:java中定义常量用关键字final来定义。 A.public int MAX_LENGTH=100 B.final int MAX_LENGTH=100 C.public const int MAX_LENGTH=100 D.public final int MAX_LENGTH=100 (4)下列叙述中,正确的是( A )—原因:Java严格区分大小写,所以变量number 与Number不相同;Java 中的注释方式除了“//”行注释之外还有段注释“/*-------*/”和文档注释/**-------*/。Java源文件中的public类只能有一个。 A. 声明变量时必须指定一个类型 B. Java认为变量number与Number相同 C. Java中唯一的注释方式是"//" D. 源文件中public类可以有0或多个 (5)下列叙述中,错误的是( D )—原因:子类继承父类,并且可以有自己的成员变量和成员方法。所以可以认为子类是父类的扩展。

matlab常用对象操作

、常用对象操作:除了一般windows窗口的常用功能键外。 1、!dir 可以查看当前工作目录的文件。!dir& 可以在dos状态下查看。 2、who 可以查看当前工作空间变量名, whos 可以查看变量名细节。 3、功能键: 功能键快捷键说明 方向上键Ctrl+P 返回前一行输入 方向下键Ctrl+N 返回下一行输入 方向左键Ctrl+B 光标向后移一个字符 方向右键Ctrl+F 光标向前移一个字符 Ctrl+方向右键 Ctrl+R 光标向右移一个字符 Ctrl+方向左键 Ctrl+L 光标向左移一个字符 home Ctrl+A 光标移到行首 End Ctrl+E 光标移到行尾 Esc Ctrl+U 清除一行 Del Ctrl+D 清除光标所在的字符 Backspace Ctrl+H 删除光标前一个字符 Ctrl+K 删除到行尾 Ctrl+C 中断正在执行的命令 4、clc可以命令窗口显示的内容,但并不清除工作空间。 二、函数及运算 1、运算符: +:加,-:减, *:乘, /:除,\:左除 ^:幂,':复数的共轭转置,():制定运算顺序。 2、常用函数表: sin( ) 正弦(变量为弧度) Cot( ) 余切(变量为弧度) sind( ) 正弦(变量为度数) Cotd( ) 余切(变量为度数) asin( ) 反正弦(返回弧度) acot( ) 反余切(返回弧度) Asind( ) 反正弦(返回度数) acotd( ) 反余切(返回度数) cos( ) 余弦(变量为弧度) exp( ) 指数 cosd( ) 余弦(变量为度数) log( ) 对数 acos( ) 余正弦(返回弧度) log10( ) 以10为底对数 acosd( ) 余正弦(返回度数) sqrt( ) 开方 tan( ) 正切(变量为弧度) realsqrt( ) 返回非负根 tand( ) 正切(变量为度数) abs( ) 取绝对值

最新JAVA语言与面向对象程序设计课后习题答案

1 第1章面向对象软件开发概述 2 1.简述面向过程问题求解和面向对象问题求解的异同。试列举出面向对象和面向3 过程的编程语言各两种。 4 答:面向过程问题求解,以具体的解题过程为研究和实现的主体,其思维特点更5 接近于计算机;面向对象的问题求解,则是以“对象”为主体,“对象”是现实世6 界的实体或概念在计算机逻辑中的抽象表示,更接近于人的思维特点。 7 面向过程的编程语言:C,Pascal, Foratn。 8 面向对象的编程语言:C++, Java,C#。 9 2.简述对象、类和实体及它们之间的相互关系。尝试从日常接触到的人或物中抽10 象出对象的概念。 11 答:面向对象技术中的对象就是现实世界中某个具体的物理实体在计算机逻辑中12 的映射和体现。类是同种对象的集合与抽象。类是一种抽象的数据类型,它是所有13 具有一定共性的对象的抽象,而属于类的某一个对象则被称为是类的一个实例,是14 类的一次实例化的结果。如果类是抽象的概念,如“电视机”,那么对象就是某一15 个具体的电视机,如“我家那台电视机”。 16 3.对象有哪些属性?什么是状态?什么是行为?二者之间有何关系?设有对象“学17 生”,试为这个对象设计状态与行为。 18

答:对象都具有状态和行为。 19 对象的状态又称为对象的静态属性,主要指对象内部所包含的各种信息,也就是20 变量。每个对象个体都具有自己专有的内部变量,这些变量的值标明了对象所处的21 状态。 22 行为又称为对象的操作,它主要表述对象的动态属性,操作的作用是设置或改变23 对象的状态。 24 学生的状态:姓名、性别、年龄、所在学校、所在系别、通讯地址、电话号码、25 入学成绩等; 26 学生的行为:自我介绍、入学注册、选课、参加比赛等。 27 4.对象间有哪三种关系?对象“班级”与对象“学生”是什么关系?对象“学生” 28 与对象“大学生”是什么关系? 29 答:对象间可能存在的关系有三种:包含、继承和关联。 30 对象“班级”与对象“学生”是包含关系。 31 对象“学生”与对象“大学生”是继承关系。 32 5.有人说“父母”和“子女”之间是继承的关系。这种说法是否正确?为什么? 33 答:“父母”和“子女”之间不是面向对象意义上的“继承”关系。因为这里的34

类和对象练习题

类和对象 一、选择题 1、下面对方法的作用描述不正确的是:( d ) A、使程序结构清晰 B、功能复用 C、代码简洁 D、重复代码 2、方法定义的变量:( b ) A 、一定在方法所有位置可见B、可能在方法的局部位置可见 C、在方法外可以使用 D、在方法外可见 3、方法的形参:(a) A、可以没有 B、至少有一个 C、必须定义多个形参 D、只能是简单变量 4、方法的调用:(c) A、必须是一条完整的语句 B、只能是一个表达式 C、可能是语句,也可能是表达式 D、必须提供实际参数 5、return 语句:( d) A、不能用来返回对象 B、只可以返回数值 C、方法都必须含有 D、一个方法中可以有多个return 语句 6、void 的含义:(d) A、方法体为空 B、方法体没有意义 C、定义方法时必须使用 D、方法没有返回值 7、main()方法的返回类型是:( c ) A 、boolean B、int C、void D、static 8、方法重载所涉及的方法:( a ) A、有相同的名字 B、参数个数必须不同 C、参数类型必须不同 D、返回类型必须不同 9、下面关于类和对象之间关系的描述,正确的是( c ) A、联接关系B、包含关系C、具体与抽象的关系D、类是对象的具体化 10、下面关于java中类的说法哪个是不正确的( c ) A、类体中只能有变量定义和成员方法的定义,不能有其他语句。 B、构造方法是类中的特殊方法。 C、类一定要声明为public的,才可以执行。

D、一个java文件中可以有多个class定义。 11、下列哪个类声明是正确的( d) A、public void H1{…} B 、public class Move(){…} C、public class void number{} D、public class Car{…} 12、下面的方法声明中,哪个是正确的(c) A、public class methodName(){} B、public void int methodName(){} C、public void methodName(){} D、public void methodName{} 13、下述哪些说法是不正确的?( b ) A、实例变量是类的成员变量 B、实例变量是用static关键字声明的 C、方法变量在方法执行时创建 D、方法变量在使用之前必须初始化 14、下面对构造方法的描述不正确是( b)。 A、系统提供默认的构造方法 B、构造方法可以有参数,所以也可以有返回值 C、构造方法可以重载 D、构造方法可以设置参数 15、定义类头时,不可能用到的关键字是( b)。 A、class B、private C、extends D、public 16、下列类头定义中,错误的是( )。 A、public x extends y {...} B、public class x extends y {...} C、class x extends y implements y1 {...} D、class x {...} 17、设A为已定义的类名,下列声明A类的对象a的语句中正确的是( ) 。 A、float A a; B、public A a=A( ); C、A a=new int( ); D、static A a=new A( ); 18、设i , j为类X中定义的int型变量名,下列X类的构造方法中不正确的是( a )。 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; } 19、有一个类A,以下为其构造方法的声明,其中正确的是

C++ 实验二 类与对象(附答案)

实验二类与对象 实验目的和要求 1.掌握类、类的数据成员、类的成员函数的定义方式。 2.理解类成员的访问控制方式。 3.掌握对象的定义和操作对象的方法。 4.理解构造函数和析构函数的定义与执行过程。 5.掌握重载构造函数的方法。 6.了解拷贝构造函数的定义方法。 实验内容 1.下面程序中有错,在不删除和增加代码行的情况下,改正错误语句,使其正确运行。#include class Aa { public: Aa(int i=0) { a=i; cout<<"Constructor "<

(1) #include class Date { void set_date(); void show_date(); int year; int month; int day; }; Date d; int main() { set_date(); show_date(); } void set_date() { cin>>d.year; cin>>d.month; cin>>d.day; } void show_date() { cout< class A { public: void A(int i=0) { m=i; } void show() { cout<

C++语言程序设计实验答案_类与对象

实验04 类与对象(6学时) (第4章类与对象) 一、实验目的 二、实验任务 4_1 声明一个CPU类。 包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。其中,rank为枚举类型CPU_Rank,声明为enum CPU_Rank{ P1=1, P2, P3, P4, P5, P6, P7 }; frequency为单位是MHz的整型数,voltage为浮点型的电压值。观察构造函数和析构函数的调用顺序。 4_2 声明一个简单的Computer类。 有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等,有两个公有成员函数run和stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,声明并实现这个类。 4_3 声明一个表示时间的结构体。 可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。

4_4(习题4-10)设计一个用于人事管理的People(人员)类。 考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号),sex(性别)、birthday(出生日期)、id(身份证号)等。其中“出生日期”声明为一个“日期”类内嵌子对象。用成员函数实现人员信息的录入和显示。要求包括:构造函数和析构函数、内联成员函数、组合。 三、实验步骤 1.(验证)声明一个CPU类,观察构造函数和析构函数的调用顺序。 首先声明枚举类型CPU_Rank,例如enum CPU_Rank{ P1=1, P2, P3, P4, P5, P6, P7 },再声明CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,声明成员函数run和stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示顺序。在主程序中声明一个CPU的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。程序名:。(程序见步骤2) ★程序的运行结果: 2.(示例)调试程序文件。 使用调试功能观察程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。参考程序如下: 操作)调试操作步骤如下: (1)单击“调试 | 逐语句”命令,系统进行单步执行状态,程序开始运行,一个DOS 窗口出现,此时Visual Studio中光标停在main()函数的入口处。

第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; }

Java类与对象实验报告

实验报告 一、实验项目:类与对象 二、实验目的: 1. 学会使用类来封装对象的属性和功能 2. 掌握类变量与实例变量,以及类方法与实例方法的区别 3. 掌握使用package和import语 三、实验器材:计算机、Java编程软件JCreator 四、实验原理(或仪器装置图): 1. 类与对象 类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类是用来定义对象的模板。 类声明 class 类名{ 类体 } 对象的声明 一般格式为: 类的名字对象名字; 定义对象引用后,用new运算符完成对象的创建工作,分配存储空间,并对其初始化。 变量名=new 类名([构造方法实参表]); 对象的使用 访问成员的基本语法形式如下:

对象名.变量成员名 对象名.方法成员名([实际参数表]) 2.成员变量和局部变量 成员变量格式:[修饰符] 变量类型变量名[=初值]; 成员方法: 格式:[修饰符] 返回值的数据类型方法名(参数1,参数2,…) { 语句序列; return[表达式]; } 类中定义的变量是成员变量,而方法中定义的变量是局部变量。 3. 构造方法 构造方法是一种特殊的方法,创建对象时被自动调用。与一般的方法不同,它没有返回值类型的说明,方法体中也不可以用return语句带回返回值。构造方法的方法名与类名相同在构造方法中可以通过this关键字调用该类中其他的构造方法。 4.包 包是Java语言中有效地管理类的一个机制。 ①通过关键字package声明包语句。package 语句作为Java源文件的第一条语句,指 明该源文件定义的类所在的包。package语句的一般格式为:package 包名; ②import 语句:使用import 语句可以引入包中的类。 五、实验步骤及数据记录: 1.定义一个圆柱体类Cylinder,并创建相应的对象,然后计算圆柱体的底面积与体积。

实验5 类和对象1答案

实验5:Java类与对象 一、实验目的 (1)使用类来封装对象的属性和功能; (2)掌握Java类的定义。 (3)java对象的使用 二、实验任务 (1)按要求编写一个Java程序。 (2)按要求完善一个Java程序,编译、运行这个程序,并写出运行结果。 三、实验内容 1.编写一个Java程序片断,以定义一个表示学生的类Student。这个类的属性有“学号”、“班号”、“姓名”、“性别”、“年龄”,方法有“获得学号”、“获得班号”、“获得性别”、“获得姓名”、“获得年龄”、“获得年龄”。 2.为类Student增加一个方法public String toString( ),该方法把Student类的对象的所有属性信息组合成一个字符串以便输出显示。编写一个Java Application程序,创建Student类的对象,并验证新增加的功能。 class Student{ long studentID; int classID; String name; String sex; int age; public Student(long studentID,int classID,String name,String sex,int age){ this.studentID=studentID; this.classID=classID; https://www.sodocs.net/doc/9912130145.html,=name; this.sex=sex; this.age=age; } public long getStudentID(){ return studentID; } public int getClassID(){

类和对象2 (3)

练习题目: 使用面向对象的思想描述游戏中的怪物 问题描述: 某公司要开发新游戏,请用面向对象的思想设计怪物类,设定属性包括:怪物名字、生命值、攻击力、防御力;方法包括:攻击的方法,防御的方法. 要求: 1、通过构造函数实现属性赋值 2、攻击方法,描述攻击状态。内容包括怪物名字,生命值,攻击力 3、防御方法通过输入参数接收攻击力。需要判断,如果攻击力小于防御力,伤害值=0;反之伤害值=攻击力-防御力根据伤害值情况,显示不同的防御信息。内容包括怪物名字,防御力,防御后的生命值. 4、编写测试方法,通过构造函数实例化怪物类的对象,并调用相关方法(测试数据信息自定) 运行效果:

练习题目: 使用面向对象的思想描述班级和学员信息 问题描述: 某公司要开发“学员管理系统”,请使用面向对象的思想,描述班级和学员信息 要求: 1、分析班级和学员的属性和方法,设计班级类和学员类 2、在学员类中通过属性描述所在班级 3、通过带参构造函数实现属性赋值 4、编写测试方法实现信息输出 参考分析思路: 班级类: 属性:班级编号,班级名称 方法:介绍班级信息的方法。通过输入参数描述班级口号,介绍信息中包括编号、名称

学员类: 属性:学号,姓名,性别,年龄,所在班级 方法:学习的方法,描述学习状态。描述内容包括姓名、学号、 年龄、所在班级信息 运行效果: 要求将加减乘除的方法改写成带参方法,在定义一个运算方法ope(),接收用户选择的运算和两个数字,根据用户选择的运算计算结果。运行如图所示: 提示:定义方法ope(),参考如下: public int ope(int op,int num1,int num2){

Java实例对象概念图解

Java编程面向对象——类与对象的关系 面向对象是一种组件化的设计思想,OOA、OOD、OOP 类与对象是整个面向对象之中最为基础的组成单元,如果需要给划出定义:类就是共性的集合,而对象是某一个性的产物;所有类实际上是用来描述一个对象的结构。 类是通过对象来使用的,而对象是通过类来创建的。 类与对象的基本定义: 在程序中,定义类,可以使用“class 类名称{}”的语法结构完成。 而类之中的组成主要有两点: * Field (属性、成员、变量),就是一推变量的集合 * Method (方法、行为),此时的方法是由对象调用的。 这个类中定义了两个属性和一个方法(可以定义更多属性和方法) *类虽然存在,但是类的使用,必须有对象; 对象的定义格式: 声明并实例化对象: 类名称对象名称 = new 类名称(); 分步完成: 声明对象:类名称对象名称 = null; 实例化对象:对象名称 = new 类名称(); 引用数据类型: 引用数据类型最大的不同在于需要内存的开辟及使用,所以关键字new 的主要功能就是开辟内存空间; 即:只要引用数据类型想使用,就必须使用关键字new 来开辟空间。 当一个对象实例化之后就可以使用以下方式利用对象来操作类的结构: 对象.属性:表示要操作类中属性内容 对象.方法():表示要调用类中的方法内容

内存概念: 堆内存:保存每一个对象的属性内容,堆内存需要用关键字 new 才可以开辟; 栈内存:保存的是一块堆内存的地址。简单的理解,栈内存保存的是对象的名字; 编程中的栈内存和堆内存的操作过程: 引用数据的初步分析: 引用是整个 Java 开发中的核心精髓所在,即:只有掌握了“引用”这一概念之后,才能加入下一步学习,类似C/C++ 中的指针概念。 在所有的引用分析里面,最关键的还是在于关键字 “new ”,每一次使用关键字new ,都会开辟新的堆内存空间,如果你的代码里面声明两个对象,并且使用了关键字new 为两个对象分别实例化操作,那么一定是各自占有各自(独立)的堆内存空间

Application对象基本操作应用示例

Application对象基本操作应用示例 Application对象代表整个Microsoft Excel应用程序,带有175个属性和52个方法,可以设置整个应用程序的环境或配置应用程序。 示例01-01:体验开/关屏幕更新(ScreenUpdating属性) Sub 关闭屏幕更新() MsgBox "顺序切换工作表Sheet1→Sheet2→Sheet3→Sheet2,先开启屏幕更新,然后关闭屏幕更新" Worksheets(1).Select MsgBox "目前屏幕中显示工作表Sheet1" Application.ScreenUpdating = True Worksheets(2).Select MsgBox "显示Sheet2了吗?" Worksheets(3).Select MsgBox "显示Sheet3了吗?" Worksheets(2).Select MsgBox "下面与前面执行的程序代码相同,但关闭屏幕更新功能" Worksheets(1).Select MsgBox "目前屏幕中显示工作表Sheet1" & Chr(10) & "关屏屏幕更新功能" Application.ScreenUpdating = False Worksheets(2).Select MsgBox "显示Sheet2了吗?" Worksheets(3).Select MsgBox "显示Sheet3了吗?" Worksheets(2).Select Application.ScreenUpdating = True End Sub 示例说明:ScreenUpdating属性用来控制屏幕更新。当运行一个宏程序处理涉及到多个工作表或单元格中的大量数据时,若没有关闭屏幕更新,则会占用CPU的处理时间,从而降低程序的运行速度,而关闭该属性则可显著提高程序运行速度。 示例01-02:使用状态栏(StatusBar属性) Sub testStatusBar() Application.DisplayStatusBar = True '开启状态栏显示 '赋值状态栏显示的文本 Application.StatusBar = "https://www.sodocs.net/doc/9912130145.html," End Sub 示例说明:StatusBar属性用来指定显示在状态栏上的信息。若不想再显示状态栏文本,可使用Applicat ion.StatusBar = False语句关闭状态栏显示,也可以在程序开始将原先的状态栏设置存储,如使用语句o ldStatusBar = Application.DisplayStatusBar将状态栏原来的信息存储在变量oldStatusBar,在程序运行完成或退出时,将变量重新赋值给状态栏,如使用语句Application.DisplayStatusBar = oldStatusBa r,以恢复状态栏原状。

4对象与类

oop概述 特别值得注意的是,以各地相继不能直接访问另一个兑现呢不得数据,也不能让其他对象直接访问自己内部的数据。对象之间的所有通信都是通过方法调用完成的。通过封装对象数据,最大限度提高可重用性,将少数据的依赖,必将程序调试时间降到最低。 类是构造对象的模板和蓝图,由类构造对象的过程成为类的实例。 封装给与对象黑盒的特征,这是提高重用性和可靠性的关键。 oop首先从设计类开始而不是从main方法开始 依赖user-a:如果一个类的方法操作另一个类的对象,我们就说这个类依赖于另一个类。 应该尽可能的将互相依赖的类减至最少。如果累A不知道类B的存在,那么他就不会关心类B的任何改变!(这意味着类B的改变不会使类A产生任何bug)。用软件工程术语来说,就是使类之间的耦合度最小! 聚合has-a:聚合关系意味着类A的对象包含类B的对象 继承is-a 用UML绘制描述类之间关系的类图。类用矩形表示。类之间的关系带有各种箭头表示。 Date类 他的对象描述一个时间点 一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。 在java中必须使用clone方法获得对象的完整拷贝。 java苦衷的GregorianCalendar类(日历表示法)扩展类Calendar类这个类描述了日立的一般属性 java.util.GregorianCalendar GregorianCalendar()构造一个日历对象,用来表示默认地区、默认时区的当前时间。 自己编写类 这里编写类所采用的风格是类的方法在前面,域在后面。这种风格有利于促使人们更加关注接口的概念,并且削减对现实的注意。 隐式参数和显示参数 this是隐式参数 方法括号中的参数为显示参数 对数据的操作要用get取用set变 注意get方法中不能写返回一个对象的引用,要先克隆再返回这样才没有回话封装性 静态域

【习题】类与对象(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-(*<

相关主题