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

类与对象答案

类与对象答案
类与对象答案

类与对象

知识要点

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<

}; }

C. class P{ D. class P{

int f; public:

}; int a;

f=25; void Seta (int x) {a=x;}

答案:D

分析:在类体内不可对数据成员进行初始化;类定义结束时需用分号;只有类中的成员函数才能存取类中的私有数据。

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

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

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

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

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

答案:D

分析:如果一个类中没有定义拷贝构造函数时,系统将自动生成一个默认的;拷贝构造函数只有一个参数,并且是该类对象的引用;拷贝构造函数的名字与类同名,并且不被指定返回类型;拷贝构造函数是一种成员函数。

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

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

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

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

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

答案:B

分析:静态成员可分为静态数据成员和静态成员函数;静态数据成员被定义后,必须对它进行初始化,初始化在类体外进行,一般放在该类的实现部分最合适,也可以放在其他位置,例如,放在主函数前面等;静态数据成员初始化与该类的构造函数和析构函数无关;在静态成员函数的实现中,可以直接引用静态成员,但不能直接引用非静态成员。

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

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

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

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

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

答案:A

分析:友元函数是非成员函数,在类体内说明了,在类体外定义,定义和调用等同于一般的普通函数;由于它可以直接访问类的私有成员,因此破坏了类的封装性和隐藏性,尽量少用。

例题8:设有如下程序结构:

class Box

{ … };

void main()

{Box A,B,C; }

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

答案:(1)3 (2)3

分析:每创建一个对象自动调用一次构造函数,在这里创建了A、B、C三个对象,所以共调用了三次构造函数;每释放一个对象,系统自动调用一次析构函数,A、B、C对象释放时,分别调用析构函数,所以析构函数共调用了三次。

例题9:设A为test类的对象且赋有初值,则语句test B(A); 表示。

答案:将对象A复制给对象B。

分析:执行test B(A);语句相当于调用了默认复制构造函数,将A对象的属性复制给B对象。

例题10:利用“对象名.成员变量”形式访问的对象成员仅限于被声明为(1) 的成员;若要访问其他成员变量,需要通过(2) 函数或(3) 函数。

答案:(1) public (2) 成员函数(3)友元函数

分析:类体内的数据成员可声明为公有的、私有的和保护的,公有的数据成员可利用“对象名.成员变量”形式来进行访问;私有的数据成员能被类中的其他成员函数或友元函数所调用;保护的数据成员可以在类体中使用,也可以在派生类中使用,但不能在其他类外通过对象使用。

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

#include

class one

{ int a1,a2;

public:

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

};

void main()

{one data(2,3);

cout<

cout<

}

分析:出错原因:构造函数参数表语法错;构造函数没有函数体;类的对象不能直接访问类的私有成员变量。

改正后的程序如下:

#include

class one

{ int a1, a2;

public:

one(int x1=0, int x2=0) {a1=x1;a2=x2;}

int geta1() { return a1; }

int geta2() { return a2; }

};

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 =>"<

}

分析:成员函数在类体外定义格式是:函数返回类型类名::成员函数名(参数表);成员函数调用格式是:对象名.成员函数名(参数表)。

改正后的程序如下:

#include

class Amplifier

{ float invol,outvol;

public:

Amplifier(float vin,float vout) {invol=vin;outvol=vout;}

float gain();

};

float Amplifier::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="<

}

分析:根据构造函数、拷贝构造函数和友元函数的特点,执行该程序后,输出结果是:calling the constructor function.

calling the constructor function.

calling the copy_initialization constructor function.

calling the copy_initialization constructor function.

OK!

calling the constructor function.

calling the copy_initialization constructor function.

calling the destructor function.

calling the destructor function.

calling the destructor function.

P=25,60

calling the destructor function.

calling the destructor function.

calling the destructor function.

说明:

(1)构造函数执行三次,分别初始化主函数中的对象m,p和move函数中的对象r。(2)拷贝构造函数共执行了三次。第一次,初始化对象n;第二次在调用函数move()时,实参n给形参q进行初始化;第三次是执行函数move的return r;语句时,系统用r初始化一个匿名对象时使用了拷贝构造函数。

(3)析构函数执行了六次。在退出函数move时释放对象r和q共调用二次;返回主函数后,匿名对象赋值给对象p后,释放匿名对象又调用一次析构函数;最后退出整个程序时释放对象m,n和p调用三次。

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

程序代码如下:

#include

#include

class student

{ int no;

char name[10];

int age;

public:

student(int i, char *str, int g)

{no=i;

strcpy(name,str);

age=g;

}

student( )

{no=0;

strcpy(name,”none”);

age=-1;

}

void display()

{if (no>0) cout<<”no” <

else cout<<”no”<

}

};

void main()

{ student d1(1001,”Tom”,18);

d1.display();

student d2;

d2.display();

}

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

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

#include

#include

class Point

{ public:

Point(int a=0, int b=0) {x=a; y=b; }

int xcord() { return x;}

int ycord (){ return y;}

private:

int x,y;

};

class Distance

{ public:

Distance(Point q1,Point q2);

double getdist() {return dist; }

private:

Point p1,p2;

double dist;

};

Distance::Distance(Point q1,Point q2):p1(q1),p2(q2)

{ double x=double(p1.xcord()-p2.xcord());

double y=double(p1.ycord()-p2.ycord());

dist=sqrt(x*x+y*y);

}

void main()

{ Point p(0,0),q(1,1);

Distance dis(p,q);

cout<<”The distance is: ”<

}

方法2:将两点之间距离函数声明为Point类的友元函数。

#include

#include

class Point

{public:

Point(int a=0, int b=0) {x=a; y=b; }

int xcord() { return x;}

int ycord (){ return y;}

private:

int x,y;

friend double Distance(Point p1,Point p2);

};

double Distance(Point p1,Point p2)

{ double dx=double(p1.x-p2.x);

double dy=double(p1.y-p2.y);

return sqrt(dx*dx+dy*dy);

}

void main()

{ Point q1(0,0),q2(1,1);

cout<<”The distance is: ”<

}

习题分析与解答

1.选择题

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

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

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

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

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

答案:A

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

A.一般成员函数

B.类的初始化

C.对象初始化

D.删除对象

答案:D

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

A.OneClass(OneClass p);

B. OneClass& (OneClass p);

C. OneClass(OneClass & p);

D. OneClass (OneClass *p);

答案:C

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

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

B.友元函数是类的成员

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

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

答案:C

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

A.public

B. protected

C.private

D. static

答案:C

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

A.public

B. protected

C.private

D. static

答案:A

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

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

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

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

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

答案:C

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

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

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

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

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

答案:A

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

(1)#include

class Point{

int x,y;

public:

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

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

};

void main()

{Point a;}

运行结果为:

Point 1,1 is deleted.

(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();

}

运行结果为:

There are 1 points,

There are 6 points,

There are 1 points,

(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( );

}

运行结果为:

Constructor,i=0,Destructor

(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();

}

运行结果为:

Constructor1

Constructor2

i=-858993460

i=10

Destructor

Destructor

(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=”<

void main( )

{ Csample a,b;

a.Display( );

b.Display( );

}

运行结果为:

i=0,k=2

i=0,k=2

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)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。

参照本章例15

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

#include

class Box

{ int x,y,z; int v,s;

public:

void init(int x1=0,int y1=0,int z1=0) {x=x1;y=y1;z=z1;}

void volue() {v=x*y*z;}

void area() {s=2*(x*y+x*z+y*z);}

void show()

{cout<<"x= "<

cout<<"长方形的周长和面积为:"<

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

#include

class fac

{ int p;

public:

fac() { p=1;}

fac( int j)

{p=1;

if(j>=0)

for(int i=1 ;i<=j;i++) p=p*i;

else cout<<"数据错误\n";

}

void show() { cout<<" 阶乘为:"<

};

void main()

{ int n;

cout<<"请输入一个整数:";

cin>>n;

fac a(n);

cout<

}

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

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

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

3)设置日期。

#include

class Cdate

{ int year,month,day;

int y1,m1,d1;

public:

void setdate(int y,int m,int d) {year=y;month=m;day=d;} void show()

{cout<<"当前日期: "<

cout<<"两天后日期:"<

}

void datetwo() //加一天后的年月日

{ d1=day;y1=year;m1=month;

for(int i=0;i<2;i++)

{ d1++;

switch(d1)

{case 29:if(!(month==2 &&(year%400==0||year%4==0&&year%100!=0))) {m1=3;d1=1;};break;

case 30:if(month==2 &&(year%400==0||year%4==0&&year%100!=0)) {m1=3;d1=1;};break;

case 31:if(month==4||month==6||month==9||month==11)

{m1=m1+1;d1=1;};break;

case 32: m1=m1+1;d1=1;if(month==12){y1=y1+1;m1=1;};break;

}

}

}

};

void main()

{ Cdate d;

int y,m,d1;

cout<<"请输入年月日: ";

cin>>y>>m>>d1;

d.setdate(y,m,d1);//加一天

d.setdate(y,m,d1);//再加一天

d.datetwo();

d.show();

}

实验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/6e13066170.html,=name; this.sex=sex; this.age=age; } public long getStudentID(){ return studentID; } public int getClassID(){

面向对象试题(标准答案)

CoreJavaOOP考试题 考试时间:90分钟 考试总分:100分 一、选择题(不定项选择)(22*4=88) 1. 类A,B的定义如下: class A { private int a = 100; A() { System.out.print("A()"); System.out.println(a); } } class B extends A { private int a = 200; B() { System.out.print("B()"); System.out.println(a); } } 运行下面的代码: new B(); 输出的结果是:(A )。 A. A() 100 B() 200 B. A() 200 B() 200 C. B() 200 A() 100 D. B() 200 A() 200

2.下列说法正确的是(D ) A.所有类都必须定义构造方法(构造器) B.构造方法必须初始化类的所有数据成员 C.子类定义了构造器后,不再调用父类的构造器 D.构造方法可以访问类的非静态成员 3.在Java中,哪个关键字使类不能派生子类?, (A ) A : final B : public C : private D : native 4.class Base{ static void test(){ System.out.println(“Base.test()”); } } public class Child extends Base{ static void test(){ System.out.println(“Child.test()”); } public static void main(String[] args){ Base base = new Child(); Child child = new Child(); base.test(); child.test(); } } 程序运行的结果是( C ) A.Child.test() Child.test() B.Child.test() Base.test() C.Base.test() Child.test() D.Base.test() Base.test()

JAVA类与对象及数组习题及复习资料

JA V 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 )—原因:子类继承父类,并且可以有自己的成员变量和成员方法。所以可以认为子类是父类的扩展。

实验:类和对象1

实验一:类和对象 【实验目的】 1.理解对象和类,掌握类的定义及如何创建一个对象; 2.掌握构造方法的运用; 3.掌握方法的定义和参数传递; 4. 掌握类的继承机制。 【实验准备】 一、复习配套教材相关章节的内容; 二、预习本次实验; 【实验内容】 1.编写一个程序,显示水果的定购行情。定义一个带有参数的构造方法,这些参数用于存放产品名,数量和价格。在主程序中输出三种不同的水果。package avage; public class text { String name; int agr; double page; public text(){ } public text(String name,int agr,double page){ https://www.sodocs.net/doc/6e13066170.html,=name; this.agr=agr; this.page=page; } public void evagre(){ System.out.println("水果名为:"+https://www.sodocs.net/doc/6e13066170.html,); System.out.println("水果数量:"+this.agr); System.out.println("水果单价:"+this.page); } } public class text1 { /** * @param args

*/ public static void main(String[] args) { // TODO Auto-generated method stub text s=new text(); https://www.sodocs.net/doc/6e13066170.html,="苹果"; s.agr =10; s.page=1.0; s.evagre(); text c=new text(); https://www.sodocs.net/doc/6e13066170.html,="香蕉"; s.agr =10; s.page=1.0; s.evagre(); text d=new text(); https://www.sodocs.net/doc/6e13066170.html,="橘子"; s.agr =10; s.page=1.0; s.evagre(); 2. 编写一个学生类,封装学生的学号、姓名、成绩等信息。再编写一个主类,

(完整版)《面向对象程序设计》答案

实验一熟悉VC++IDE开发环境 一、实验目的 1、熟悉VC++6.0集成开发环境,熟练掌握VC++6.0项目工作区、各种编辑器、菜单栏和工具栏的使用。 2、掌握如何编辑、编译、连接和运行一个C++程序。 3、通过运行简单的C++程序,初步了解C++源程序的结构和特点。 二、实验要求 1、分析下列程序运行的结果。 程序一: #include int add(int x,int y=8); void main() { int x=4; cout< void main() { int *p,i; i=5; p=&i; i=*p+10; cout<<"i="< void main(void) { int i=10; int &r=i; r++; cout<<"i="< void func(); int n=1; void main() { static int a; int b= -9; cout <<"a:"<

实验3 类和对象

实验3 类和对象的创建与使用 一、实验目的 1、掌握类的定义和对象的创建; 2、掌握构造方法的作用、格式及重载; 3、掌握修饰词对成员存取权限的限制。 4、掌握实例成员、类成员的定义和使用方法。 二、实验内容 1、定义储蓄账户类,并创建对象模拟银行基本操作。 2、两游戏角色决斗。给定二个不同的角色,判定交手的胜负关系。(选做) 3、设计学生类、学校类、录取类,根据学生成绩和学校分数线,判断是否录取。 三、实验步骤 说明:请将第1,3题代码写入实验报告实验步骤处。 1、模拟银行账户功能。 编写程序,模拟银行账户功能。要求如下: 属性:账号、姓名、地址、存款余额、最小余额。 方法:存款、取款、查询。 根据用户操作显示储户相关信息。 如存款操作后,显示储户原有余额、今日存款数额及最终存款余额。 取款时,若取款成功,显示信息提示;若最后余额小于最小余额,拒绝取款,并显示信息提示。具体显示信息可据方便性原则自拟。 public class AccountOperation { public static void main(String [] args) { Account account1=new Account("650101","柳眉","天河学院",800.00); Account account2=new Account("650102","郑杰","天河学院",200.00); account1.transfer(account1,account2,300.0); account1.deposit(300.5); account1.withdraw(200); account1.withdraw(300); account1.query(); System.out.println(account1.toString()); //System.out.println(https://www.sodocs.net/doc/6e13066170.html,); error!! } } class Account { private String account; private String name; private String address; private double balance;

JAVA基础-第3章类与对象-练习题-200910

第3章类与对象 一.选择题 1.下列不属于面向对象编程的特性是(D)。 A.封装性 B. 继承性 C. 多态性 D. 编译执行 2.下列类的声明中不合法的是(C)。 A. class People{…} B. class 植物{…} C. Class A{…} D. public class 共有类{… 3.下列方法的声明中不合法的是(C)。 A. float area(){…} B. void area(){…} C. double area(d){…} D. int area(int r){…} 4. 下列构造方法(构造器)的调用中正确的是(C)。 A. 按照一般的方法调用 B. 由用户直接调用 C. 只能通过new自动调用 D. 被系统调用 5.下列程序运行的结果是(A)。 class Book{ int width; int length; } public class A{ static void f(Book p){ p.width=20; p.length=40; } public static void main(String args[]){ Book b=new Book(); b.width=10; b.length=20; f(b); System.out.print(" "+b.width); System.out.print(" "+b.length); } } A. 20 40 B. 10 40 C. 10 20 D. 以上都不对 6.下列程序运行的结果是(D)。 public class A{ static void f(int y){ y=y+10; } public static void main(String args[]){ double x=10; f(x); System.out.println(x); } }

实验报告_实验3 类与对象

实验报告_实验3 类与对象(学生学号_姓 名) 一、实验目的 1.熟悉类的组成,掌握类的声明方法; 2.理解构造方法的作用,并掌握构造方法的定义; 3.熟练使用访问器和设置器实现信息隐藏和封装; 4.熟悉一般方法、构造方法的重载; 5.能够正确地区分静态变量与实例变量、静态方法与实例方法的不同,掌握静态变量和静态方法的使用;6.掌握对象的创建、引用和使用及向方法传递参数的方式; 7.掌握this关键字的使用以及对象数组的创建和访问; 8.掌握Java包的创建、包成员的各种访问方式; 9.掌握一维数组:声明,创建,初始化,数组元素的访问; 10.掌握多维数组的概念:二维数组的声明,初始化,元素的访问。 二、实验内容与步骤 1.请回答下列问题: (1)Cirecle类定义了几个属性?它们的类型、访问权限各为什么? 答:两个PI,floatl类型,静态私有权限 Radius,float;类型,私有权限 (2)类中的“PI”的值可以在程序的方法中更改吗? 答:不可以,因为PI为静态变量 (3)Cirecle类定义了几个方法?它们的访问权限怎样?

答:四个,getRadius(),setRadius(float radius),getPerimeter(),getArea()都是公有权限 2.写出Rectangle类的程序代码: class Rectangle { private float width; private float length; public float getWidth( ) //获取矩形宽度 {return width;} public float getLength( ) //获取矩形长度 {return length;} public float getPerimeter( ) //获取矩形周长 {return 2*(width+length);} public float getArea( ) //获取矩形面积 {return (width*length);} public void setWidth(float w) //设置矩形宽度 {width=w;} public void setLength(float l) //设置矩形长度 {length=l;} } 3.回答下列问题: (1)该程序中有几个类?主类是什么?如果将这两个类放在一个文件中,源程序文件名应是什么?答:两个类:Circle、CircleTest;主类是CircleTest;源程序文件名是CircleTest。

4.1类和对象强化练习

4.1.1 编写一个Rect类,要求: (1)Rect类的私有成员变量有: a:double 型,代表长。 b:double 型,代表宽。 (2)Rect类的共有成员方法有: Rect( ):构造方法。默认的a、b的值都是0。 Rect(double len, double width):分别用两个形式参数len、width对成员变量a、b进行初始化。double area( ):计算矩形的面积。 void display( ):输出矩形的长、宽和面积 (3)然后编写一个含有main( )方法的类UseRect,创建Rect类的对象,创建Rect类的对象,并调用上面定义的方法。 4.1.2 编写一个类Point来描述屏幕上的一个点,要求: (1)Point类的私有成员变量有: x:double型,代表x坐标。 y:double型,代表y坐标。 (2)Point类的公有成员方法有: Point( ):构造方法。默认的x、y坐标都是0。 Point(double xx,double yy):构造方法。分别用两个形式参数xx、yy对成员变量进行初始化。 double GetX():获取x坐标。 double GetY():获取y坐标。 (3)然后编写一个含有main方法的类UsePoint,创建Point类的对象,并调用上面定义的方法。 4.1.3 编写一个Brithday类,要求: (1)Birthday类的私有成员变量有: year:int 型,代表年。 month:int型,代表月。 day:int型,代表日。 (2)Birthday类的共有成员方法有: Birthday( ):构造方法。生日的默认初始值为2000年1月1日。 Birthday(int y, int m, int d ):构造方法。分别用3个形式参数y、m、d对成员变量year、month、day进行初始化。 int GetY ear( ):获取年份year作为方法的返回值。 int GetMonth( ):获取年份month作为方法的返回值。 int GetDay( ):获取年份day作为方法的返回值。 void getBirthday( ):以****年/**月/**日的形式显示一个人的生日。 (3)然后编写一个含有main()方法的类UseBrithday,创建Brithday类的对象,并调用上面定义的方法。 4.1.4 设计一个立方体类Box,要求: (1)Box类的私有成员变量有: a:float型,代表立方体的边长。 volume:float型,代表立方体的体积。 (2)Box类的共有成员方法有: Box( ):构造方法。

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()函数的入口处。

面向对象答案

一、填空题 101 Java中一个类可以有 1 个父类。 102 如果一个类的声明中没有使用extends关键字,这个类被系统默认为是Object 类的子类。 103 子类自然地继承了其父类中不是private 的成员变量作为自己的成员变量。 104 当子类中定义的成员变量和父类中的成员变量同名时,子类的成员变量隐藏了父类的成员变量。 105 子类通过成员变量的隐藏和方法的重写可以把父类的状态和行为改变为自身的状态和行为。 106 对于重写或继承的方法,Java运行时系统根据调用方法的实例的类型来选择调用哪个方法。 107 对于子类创建的一个对象,如果子类重写了父类的方法,则运行时系统调用子类的方法。 108 对于子类创建的一个对象,如果子类继承了父类的方法,未重写,则运行时调用父类的方法。 109 在Java语言中多态性体现在由方法重载实现的静态多态性和方法重写实现的动态多态性。 110 final 类不能被继承,即不能有子类。 111 abstract 类不能创建对象,必须产生其子类,由子类创建对象。 112 如果一个方法被修饰为final 方法,则这个方法不能被重写。 113 对于abstract 方法,只允许声明,而不允许实现。 114 如果一个方法被修饰为final方法,则这个方法不能被重写。 115 如果一个类是一个abstract类的子类,它必须具体实现父类的abstract方法。116 局部变量的名字与成员变量的名字相同,若想在该方法内使用成员变量,必须使用关键字this 。 117 在关键字中能代表当前类或对象本身的是this 。 118 如果在子类中想使用被子类隐藏的父类的成员变量或方法可以使用关键字super 。119 子类如果想用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字super 来表示。 120 如果在子类中想使用被子类隐藏了的父类成员变量或方法就可以使用关键字super 。 121 Java中为了克服单继承的缺点,使用了接口,一个类可以实现多个接口。 122 接口就是方法定义和常量值的集合。 123 使用关键字interface 来定义接口。 124 接口定义包括接口的声明和接口体。 125 一个类通过使用关键字implements 声明自己实现一个或多个接口。 126 如果一个类实现了某个接口,那么这个类必须实现该接口的所有方法。 127 接口中的方法被默认的访问权限是public 。 128 接口的定义包括接口声明和接口体。 129 定义接口时,接口体中只进行方法的声明,不允许提供方法的实现。 130 如果接口中的方法的返回类型不是void的,那么在类中实现该接口的方法时,方法体至少要有一个return 语句。 131 内部类指那些类定义代码被置于其他类定义中的类。 132 泛型是Java 的新特性。

类和对象练习题

类和对象 一、选择题 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,以下为其构造方法的声明,其中正确的是

实验5 类和对象

类和对象 一、实验目的 1、掌握类的定义和对象的创建; 2、掌握构造方法的作用、格式及重载; 3、掌握修饰词对成员存取权限的限制。 4、掌握实例成员、类成员的定义和使用方法。 二、实验内容 1、定义储蓄账户类,并创建对象模拟银行基本操作。 2、两游戏角色决斗。给定二个不同的角色,判定交手的胜负关系。(选做) 3、设计学生类、学校类、录取类,根据学生成绩和学校分数线,判断是否录取。 三、实验步骤 说明:请将第3题代码写入实验报告实验步骤处。 1、模拟银行账户功能。 编写程序,模拟银行账户功能。要求如下: 属性:账号、姓名、地址、存款余额、最小余额。 方法:存款、取款、查询。 根据用户操作显示储户相关信息。 如存款操作后,显示储户原有余额、今日存款数额及最终存款余额。 取款时,若取款成功,显示信息提示;若最后余额小于最小余额,拒绝取款,并显示信息提示。具体显示信息可据方便性原则自拟。 2、两游戏角色决斗。(选做) 角色1交手次数+1,生命值-1,经验值+2;角色2交手次数+1,生命值-2,经验值+3。经验值每增加50时,生命值+1;生命值<0判为负。生命值初始为1000,经验值初始为0。给定二个不同的角色,判定交手的胜负关系。 提示: step1:建立角色类,给出相应的成员,并能以生命值、经验值初始化角色对象。 step2:建立fight方法,接收二个角色类型的参数,返回胜者。 step3:初始化二角色,调用fight方法。 3、根据分数录取学生。 设计一个学校类,其中包含成员变量line(录取分数线)和对该变量值进行设置和获取的方法。 编写一个学生类,它的成员变量有考生的name(姓名)、id(考号)、total(综合成绩)、sports(体育成绩)。它还有获取学生的综合成绩和体育成绩的方法。 编写一个录取类,它的一个方法用于判断学生是否符合录取条件。其中录取条件为:综合成绩在录取分数线之上,或体育成绩在96以上并且综合成绩大于300。在该类的main()方法中,建立若干个学生对象,对符合录取条件的学生,输出其信息及“被录取”。 四、实验记录与分析(可自拟或选择) 1、重载的构造方法具有不同个数或不同类型的参数,编译器就可以根据这一点判断出用new 关键字产生对象时,该调用哪个构造方法了。 2、每个对象拥有各自的实例成员变量,而所有对象共享一个类成员变量。 3、实例成员变量通过对象引用,类成员变量通过类或对象名访问。

面向对象分析与及设计习题及答案

面向对象分析与及设计习题及答案 一、单项选择题 1.到20世纪末,面向对象软件工程已经逐渐发展成熟,特别是(D)的 形成和广泛使用,采用面向对象分析与编程的软件开发方法已成为软件开发的主流方法。 A. Simula67语言 B. Smalltalk语言 C. Java语言 D. 统一建模语言(UML)的标准 2. 面向对象的运动产生了多种面向对象的语言, 其中(C)是一种混合性面向对象语言, 既支持面向过程的程序设计方法,又支持面向对象的程序设计方法,有广泛应用的基础和丰富开发环境的支持,因而使面向对象的程序设计能得到很快普及。 A. Smalltalk B. Eiffel C. C++ D. Java 3.下列不属于面向对象技术的基本特征的是(B)。 A. 封装性 B. 模块性 C. 多态性 D. 继承性 4. 面向对象程序设计将描述事物的数据与(C) 封装在一起,作为一个相互依存、不可分割的整体来处理。 A. 信息 B. 数据隐藏 C. 对数据的操作 D. 数据抽象 5. 关于面向对象方法的优点,下列不正确的叙述是(C)。 A. 与人类习惯的思维方法比较一致 B. 可重用性好 C. 以数据操作为中心 D.可维护性好 6. (D)是从用户使用系统的角度描述系统功能的图形表达方法。 A. 类图 B. 对象图 C. 序列图 D. 用例图 7. (C) 是表达系统类及其相互联系的图示,它是面向对象设计的核心,建立状态图、协作图 和其他图的基础。 A.对象图 B. 组件图 C. 类图 D. 配置图 8.(D)描述了一组交互对象间的动态协作关系,它表示完成某项行为的对象和这些对象之 间传递消息的时间顺序。 A.对象图 B. 协作图 C. 状态图 D. 序列图 9.(D)就是用于表示构成分布式系统的节点集和节点之间的联系的图示,它可以表示系统 中软件和硬件的物理架构。 A. 组件图 B. 协作图 C. 状态图 D. 配置图 10. 使用UML进行关系数据库的(B)时,需要设计出表达持久数据的实体类及其联系,并把它们映射成为关系数据库表(Table)、视图(View)等。 A. 业务Use Case模型设计 B. 逻辑数据模型设计 C. 物理数据模型设计 C. 物理实现设计 11.一个设计得好的OO系统具有(B) A. 低内聚、低耦合的特征 B. 高内聚、低耦合的特征 C. 高内聚、高耦合的特征 D. 低内聚、高耦合的特征 12.下面()不是UML的基本构成元素。(A) A. 控制语言 B. 基本构造块 C. 规则 D. 公共机制

JAVA类与对象习题

JAVA类与对象习题 一、写出一个类People,并由该类做基类派生出子类Employee和Teacher。其中People 类具有name、age两个保护成员变量,分别为String类型、整型,且具有公有的getAge 成员函数,用于返回age变量的值。Employee类具有保护成员变量empno,Teacher类有teano和zc成员变量。 二、(1)创建Rectangle类,添加属性width、height; (2)在Rectangle类中添加两种方法计算矩形的周长和面积; (3)编程利用Rectangle输出一个矩形的周长和面积 三、(1)设计一个User类,其中包括用户名、口令等属性以及构造方法(至少重载2 个)。获取和设置口令的方法,显示和修改用户名的方法等。编写应用程序测试User 类。 (2)定义一个student类,其中包括用户名、姓名、性别、出生年月等属行以及init()——初始化各属性、display()——显示各属性、modify()——修改姓名等方法。实现并测试这个类。 (3)从上题的student类中派生出Granduate(研究生)类,添加属性:专业subject、导师adviser。重载相应的成员方法。并测试这个类。 四、项目名称:Bank Account Management System 银行账户管理系统简称BAM 练习1:(面向对象基础语法) 写一个账户类(Account), 属性: id:账户号码长整数 password:账户密码 name:真实姓名 personId:身份证号码字符串类型 email:客户的电子邮箱 balance:账户余额 方法: deposit: 存款方法,参数是double型的金额 withdraw:取款方法,参数是double型的金额

面向对象程序设计(答案)

学号:姓名: 第三章面向对象程序设计作业 一、判断题 1、一个Java源程序可有多个类,但只仅有一个public类,而且程序名与public类名相同。对 2、如果类A和类B在同一个包中,则除了私有成员外,类A可以访问类B中所有的成员。对 3、接口中的成员变量全部为常量,方法为抽象方法。对 4、抽象类可以有构造方法,可以直接实例化。错 5、对static方法的调用可以不需要类实例。对 6、包含抽象方法的类一定是抽象类。对 7、方法中的形参可以和方法所属类的属性同名。对 8、接口无构造器,不能有实例,也不能定义常量。错 9、类的实例对象的生命周括实例对象的创建、使用、废弃、垃圾的回收。对 10、Java应用程序的入口main方法只有一种定义法。对 二、选择题 1、下列答案正确的是(A ) A) 在同一个Java源文件中可以包含多个类,只能有一个被声明为public B) 在同一个Java源文件中只能包含一个类,并被声明为public C) 在同一个Java源文件中可以包含多个类,都可以被声明为public D) 在同一个Java源文件中可以包含多个类,只能有一个被声明为default 2、Java实现动态多态性是通过( B )实现的。 A) 重载B) 覆盖 C) 接口D) 抽象类 3、下列哪一个是正确的方法重载描述( A ) A) 重载方法的参数类型必须不同 B) 重载方法的参数名称必须不同 C) 返回值类型必须不同 D) 修饰词必须不同 4、final关键字不可以用来修饰( D ) A) 类B) 成员方法 C) 域D) 接口 5、接口的所有成员方法都具有( B )属性 A) private, final B) public, abstract C) static, protected D) static 6、Java的封装性是通过(A )实现的 A) 访问控制B) 设计内部类 C) 静态域和静态方法D) 包 7、下列接口或类不属于.*包的是( D ) A) Collection B)Vector C) Map D) Integer 8、下述哪一组方法,是一个类中方法重载的正确写法( A ) A) int addValue( int a, int b ){return a+b;}

C++面向对象程序设计习题 类与对象

类和对象(一) 知识点: 1.类与对象的概念,及两者的关系? 2.类定义的格式,对象定义的格式,访问对象的成员的格式 3.类中成员访问权限有哪几种,它们的特点? 4.如何对对象进行初始化? 5.构造函数与析构函数的特点,构造函数在哪些情况下被系统自动调用,析构函数什么情况下被调用;存在虚基类的派生类构造函数调用顺序? 6.缺省构造函数的特点 7.拷贝构造函数的功能与特点 8.成员函数与内联函数的区别 9.静态成员的概念与作用 10.静态成员函数调用格式 11.什么是友元,友元的作用 12.作用域运算符的功能是什么?它的使用格式如何? 13.满足成员函数重载的条件 练习题1 一、选择填空 1.在下列关键字中,用以说明类中公有成员的是( )。 A .public;B.private;C.protected;D.friend。 2.下列的各类函数中,( )不是类的成员函数。 A.构造函数;B.析构函数;C.友元函数;D.拷贝初始化构造函数。 3.作用域运算符的功能是( )。 A.标识作用域的级别的; B.指出作用域的范围的; C.给出作用域的大小的; D.标识某个成员是属于哪个类的。 4.( )是不可以作为该类的成员的。 A.自身类对象的指针; B.自身类的对象; C.自身类对象的引用; D.另一个类的对象。 5.( )不是构造函数的特征。 A.构造函数的函数名与类名相同; B.构造函数可以重载;

C.构造函数可以重载设置缺省参数; D.构造函数必须指定类型说明。 6.( )是析构函数的特征。 A.一个类中能定义一个析构函数; B.析构函数名与类名不同; C.析构函数的定义只能在类体内; D.析构函数可以有一个或多个参数。 7.通常的拷贝初始化构造的参数是( )。 A.某个对象名; B.某个对象的成员名; C.某个对象的引用名; D.某个对象的指针名。 8.关于成员函数特征的下述描述中,( )是错误的。 A.成员函数一定是内联函数; B.成员函数可以重载; C.成员函数可以设置参数的缺省值; D.成员函数可以是静态的。 9.下述静态数据成员的特性,( )是错误的。 A.说明静态数据成员是前面要加修饰符STA TIC; B.静态数据成员要类外进行初始化; C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符; D.静态数据成员不是所有对象所公有的。 10.友元的作用( )。 A.提高程序的运用效率; B.加强类的封装性; C.实现数据的隐藏性; D.增强成员函数的种类。 二、判断下列描述的正确性,对者打√,错者划×。 1.使用关键字class定义的类中缺省的访问权限是私有(private)的。 2.作用域运算符( ::)只能用来限定成员函数所属的类。 3.析构函数是一种函数体为空的成员函数。 4.析构函数和构造函数都不能重载。 5.说明或定义对象时,类名前面不需要加class关键字。 6.对象成员的表示与结构变量成员表示相同,使用运算符.或—>。 7.所谓私有成员是指只有类中所提供的成员函数才能直接使用它们,任何类以外的函数对它们的访问都是非法的。 8.某类中的友元类的所有成员函数可以存取或修改该类中的私有成员。 9.可以在类的构造函数中对静态数据成员进行初始化。 10.如果一个成员函数只存取一个类的静态数据成员,则可将该成员函数说明为静态成员函数。 三、分析下列程序的输出结果。 1. #include class 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<

相关主题