当前位置:文档之家› 2011面向对象C++期末复习习题练习

2011面向对象C++期末复习习题练习

2011面向对象C++期末复习习题练习
2011面向对象C++期末复习习题练习

2011面向对象C++期末复习习题练习

一、选择题

( D ) 1、C++对C语言作了很多改进,下列描述中使得C语言发生了质变。

A、增加一些新的运算符

B、允许函数重载,并设置默认参数

C、规定函数说明必须用原形

D、引进了类和对象的概念

( D ) 2、下列关于指针的运算中,是非法的。

A、在一定条件下,可以进行相等或不相等的运算

B、可以用一个空指针赋值给某一个指针

C、一个指针可以加上两个整数之差

D、两个指针在一定条件下可以相加

( A ) 3、下列for循环的循环体的执行次数为__________。

for(int i(0),j(10);i=j=0;i++,j--);

A、0

B、1

C、10

D、无限

( D ) 4、在函数说明时,下列项不是必要的。

A、函数的类型

B、函数参数类型和名字

C、函数名字

D、返回值表达式

( A ) 5、友元的作用是

A、提高程序的效率

B、加强类的封装

C、实现数据的隐藏性

D、增加成员函数的种类

( C ) 6、下列运算符中不能重载的是

A、&&

B、[]

C、::

D、new

( C ) 7、关于虚函数的描述中,是正确的。

A、虚函数是一个static类型的成员函数

B、虚函数一个非成员函数

C、基类中说明了虚函数后,派生类中与其对应的函数可以不必说明为虚函数

D、派生类的虚函数与基类的虚函数具有不同的参数个数和类型

( C ) 8、抽象类是指

A、没有实现的类

B、含有虚函数的类

C、含有纯虚函数的类

D、以上都不是( B ) 9、动态释放内存的运算符为:

A、new

B、delete

C、malloc

D、free

( D ) 10、以下声明正确的为

A、double area(double a=2.6,double b);

B、double area(double =2.6,double b,double =4);

C、double area(double a, double b=3.0,double c);

D、double area(double a,double b=3,double c=4);

( D ) 11、下列各种高级语言中,不是面向对象的程序设计语言是( )。

A.C++ B.Java C.https://www.doczj.com/doc/713304426.html, D.C

( B ) 12、下列关于定义一个指向double型变量的指针,正确的是()。

A.int a(5);double *pd=&a;B.double d(2.5),*pd=&d;

C.double d(2.5),*pd=d;D.double a(2.5),pd=&a;; ( C ) 13、下列变量名中,非法的是( )。

A.A25 B.My_car C.My-str D.abc

( C ) 14、下列关于常成员的描述中,错误的是( )。

A.常成员是用关键字const说明的

B.常成员有常数据成员和常成员函数两种

C.常数据成员的初始化是在类体内定义它时进行的

D.常数据成员的值是不可以改变的

( A ) 15、已知:int a(5),&ra=a;下列描述中,错误的是( )。

A.ra是变量a的引用,即为变量的别名B.ra的值为5

C.ra的地址值为&a D.改变ra的值为10,变

量a值仍为5

( D ) 16、下列关于运算符new的描述中,错误的是( )。

A.它可以创建对象或变量 B.它可以创建对

象数组或一般类型数组

C.用它创建对象或对象数组时要调用相应的构造函数 D.用它创建的对

象可以不用delete运算符释放

( D ) 17、下列选择重载函数的不同实现的判断条件中,错误的是( )。

A.参数类型不同B.参数个数不同

C.参数顺序不同D.函数返回值不同

( C ) 18、下列关于构造函数的描述中,错误的是( )。

A.构造函数可以重载B.构造函数名同类名

C.带参数的构造函数具有类型转换作用D.构造函数是系统自动调

用的

( C ) 19、下列运算符中不能重载的是( )

A、+

B、=

C、?:

D、new

( D ) 20、下列关于多继承二义性的描述中,错误的是( )。

A.一个派生类的多个基类中出现了同名成员时,派生类对同名成员的访问

可能出现二义性

B.一个派生类有多个基类,而这些基类又有一个共同的基类,派生类访问

公共基类成员时,可能出现二义性

C.解决二义性的方法是采用类名限定

二、编程

1、编写一个程序,程序中首先声明日期(年,月,日)类Date和时间(时,分,秒)类Time,并由这两个基类派生出日期时间类DateTime,最后在主函数中分别用类的默认构造函数和重载构造函数声明类DateTime类的对象,测试类声明的正确性。

#include

class date{

public:

date(){year=0;month=0;day=0;}

date(int y,int m,int d){year=y;month=m;day=d;}

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

void displaydate(){cout<

int year,month,day;

};

class time{

public:

time(){hour=0;minute=0;second=0;}

time(int h,int m,int s){hour=h;minute=m;second=s;}

void settime(int h,int m,int s){hour=h;minute=m;second=s;}

void displaytime(){cout<

private:

int hour,minute,second;

};

class datetime:public date,public time{

public:

datetime(){}

datetime(int y,int mo,int d,int h,int mi,int s):date(y,mo,d),time(h,mi,s){}

void setdatetime(int y,int mo,int d,int h,int mi,int s){

setdate(y,mo,d);

settime(h,mi,s);

}

void display(){

displaydate();

displaytime();

}

};

void main(){

datetime d1,d2(1990,1,1,13,20,21);

d1.display();

d2.display();

}

2定义一个复数类,类中包括real和image两个数据成员,定义合适的构造函数,重载“+”,“-”,“=”三个运算符。并在主函数中测试。

#include

class complex{

public:

complex(){real=0.0;image=0.0;}

complex(double r,double i){real=i;image=i;}

void setcomplex(double r,double i){real=i;image=i;}

void display(){cout<<"real is "<

complex& operator+(complex& c){

real=real+c.real;

image=image+c.image;

return *this;

}

complex& operator-(complex& c){

real=real-c.real;

image=image-c.image;

return *this;

}

private:

double real,image;

};

void main(){

complex c1,c2,c3;

c1.setcomplex(1,1);

c2.setcomplex(2,2);

c3=c1+c2;

c3.display();

c1=c1-c1;

c3=c1-c2;

c3.display();

}

3、设计程序:打印出1~100之间能被9整除的所有整数。

#include

void main(){

int i,j;

for(i=1,j=0;i<=100;i++)

if(i%9==0){

cout<

j++;

if(j%5==0) cout<

}

}

4、设计一个含有指针类型的程序:

a)定义一个整型变量a,一个整型指针p,一个引用r。

b)通过p把a的值改为10,输出a的值;

c)通过r把a的值改为5,输出a的值。

#include

void main()

{

int a,*p=&a;

int &r=a;

*p=10; cout<<"通过指针修改a的值为"<

r=5; cout<<"通过引用修改a的值为"<

}

5、设计一个单继承的类层次程序

1)基类Person中有“姓名”、“年龄”等数据成员,包含的成员函数有void

PrintNameAge()、构造函数和析构函数,其中PrintNameAge()输出Person对象的“姓

名”、“年龄”等数据成员。

2)派生类Student从Person公有继承,增加数据成员“学号(No)”,包含的成员函数

有void PrintNo()、void PrintNameAge()、构造函数和析构函数,其中PrintNameAge()

输出学生对象的“姓名”、“年龄”等数据成员,PrintNo()输出学生对象的学号。

3)其它成员函数根据需要添加。在主函数中创建一个学生类的对象:Student

s("sally",20,1001),调用PrintNameAge()和PrintNo()进行测试。

#include

#include

class Person

{

public:

Person(){}

Person(char *name,int age);

~Person();

void PrintNameAge();

private:

char *Name;

int Age;

};

class Student:public Person

{

public:

Student(){}

Student(char *name,int age,int no);

~Student();

void PrintNo();

void PrintNameAge();

private:

int No;

};

Person::Person(char *name,int age)

{

Name=new char[strlen(name)+1];

strcpy(Name,name);

Age=age;

}

Person::~Person()

{

delete []Name;

}

void Person::PrintNameAge()

{

cout<<"name:"<

cout<<"age:"<

}

Student::Student(char *name,int age,int no):Person(name,age)

{

No=no;

}

Student::~Student()

{}

void Student::PrintNameAge()

{ cout<<"student:"<

Person::PrintNameAge();

}

void Student::PrintNo()

{ cout<<"No:"<

}

void main()

{

Student s("sally",20,1001),

s.PrintNameAge();

s.PrintNo(); }

6编写函数void T(int x[],int n)(其中n为数组x的元素个数),实现将数组中的元素前后逆置。如:X[5]={1,2,3,4,5}即X[0]=1,X[1]=2,X[2]=3,X[3]=4,X[4]=5,函数调用T(X,5)后,得到X[0]=5,X[1]=4,X[2]=3,X[3]=2,X[4]=1。并用数据在主函数中测试、输出结果。

#include

void T(int x[],int n);

int main()

{

int a[5]={1,2,3,4,5};

int i;

cout<<"原数组:";

for(i=0;i<5;i++)

cout<<'\t'<

cout<

T(a,5);

cout<<"逆置后:";

for(i=0;i<5;i++)

cout<<'\t'<

cout<

return 0;

}

void T(int x[],int n)

{

int temp,i;

for(i=0;i

{

temp=x[i];

x[i]=x[n-1];

x[n-1]=temp;

}

}

8、编程实现

1)定义一个表示学生的类Student,该类属性包括“学号(int)”,“班号(int)”,“年龄(int)”,

“姓名(string)”,“性别(string)”等,这些属性的访问权限为private;函数包括“获得

学号(getstudentno())”,“获得班号(getclassno())”,“获得年龄(getage())”,” 获得姓名

(getstudentnname())”,” 获得性别(getsex())”,这些函数的访问权限为public。

2)编写类Student的构造函数,实现对private成员的初始化。如可以调用:Student

stud(12,3,48,"比尔","男"),其中,学号=12;班号=3,年龄=48,姓名=“比尔“;性

别=“男”。

3)在主函数中,创建Student类的对象,并验证函数的功能。

答案

#include

#include

using namespace std;

class Student{

private:

int studentno; //学号

int classno; //班号

string studentnname;//姓名

string sex; //性别

int age; //年龄

public:

int getstudentno();

int getclassno();

int getage();

string getstudentnname();

string getsex();

public:

Student(int studentno,int classno,int age,string name,string Thissex );

};

Student::Student(int a,int b,int c,string name,string Thissex )

{

studentno=a;

classno=b;

age=c;

studentnname=name;

sex=Thissex;

}

int Student::getstudentno()

{

return studentno;

}

int Student::getclassno()

{

return classno;

}

int Student::getage()

{

return age;

}

string Student::getstudentnname()

{

return studentnname;

}

string Student::getsex()

{

return sex;

}

int main()

{

Student stud(12,3,48,"比尔","男");

cout<<"年龄="<

cout<<"班级="<

cout<<"学号="<

cout<<"姓名="<

cout<<"性别="<

return 0;

}

9.编写程序,输入一个正整数,在程序中,将这个数按反序输出答案

#include

using namespace std;

int main()

{ cout<<"please input the number: "<

int a,b;

cin>>a;

while(a>0)

{b=a%10;

a/=10;

cout<

}

return 0;

}

10用重载函数实现两个整数、三个整数和四个整数中查找最大值,在主函数中输入数据并调用相应函数,并在主函数中输出找到的最大值。在主函数中测试

#include

using namespace std;

int Max(int x,int y);

int Max(int x,int y,int z);

int Max(int x,int y,int z,int l);

int main()

{

int a(14),b(7),c(26),d(17);

cout<<"a,b两个数中的最大值为"<

cout<<"a,b,c三个数中的最大值为"<

cout<<"a,b,c,d四个数中的最大值为"<

}

int Max(int x,int y)

{

return x>y?x:y;

}

int Max(int x,int y,int z)

{

int t=Max(x,y);

return Max(t,z);

}

int Max(int x,int y,int z,int l)

{

int t=Max(x,y,z);

return Max(t,l);

}

11、编写程序将十进制数转换成八进制数。

#include

void trans(int , int);

void main()

{

int n;

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

cin>>n;

trans(n,8);

}

void trans(int n,int base)

{ int num[20], i=0, j,m=n;

do

{ i++;

num[i]=m%base;

m=m/base;

}while(m!=0);

cout<

for(j=i;j>=1;j--)

cout<

cout<

}

12声明一个Tree类,有

1) 数据成员ages(树龄)

2) 成员函数Grow(int years)对ages加上years

3) 成员函数showAge()显示对象的数据成员ages的值

4) 构造函数Tree(int n=0)进行初始化

其它成员不限,在主函数中创建一个Tree类的对象进行测试。#include

class Tree

{

public:

Tree(int n=0);

~Tree(){}

void Grow(int years);

void showAge()const;

private:

int ages;

};

Tree::Tree(int n)

{

ages=n;

}

void Tree::Grow(int years)

{

ages+=years;

}

void Tree::showAge()const

{

cout<<"树龄是:"<

}

void main()

{

int n,years;

cout<<"输入树龄:"<

cin>>n;

Tree tree1(n);

tree1.showAge();

cout<<"输入树的生长年龄:"<

cin>>years;

tree1.Grow(years);

cout<<"生长"<

tree1.showAge();

}

面向对象方法题库1-1-9

面向对象方法题库1- 1-9

问题: [单选]用例(usecase)用来描述系统对事件做出响应时所采取的行动。用例之间是具有相关性的。在一个“订单输入子系筑”中,创建新订单和更新订单都需要核查用户账号是否正确。用例“创建新订单”、“更新订单”与用例“核查客户账号”之间是()关系。 A.包含(includE. B.扩展(extenD. C.分类(classification) D.聚集(aggregation) 用例是在系统中执行的一系列动作,这些动作将生成特定参与者可见的价值结果。它确定了一个和系统参与者进行交互,并可由系统执行的动作序列。用例模型描述的是外部执行者(actor)所理解的系统功能。用例模型用于需求分析阶段,它的建立是系统开发者和用户反复讨论的结果,表明了开发者和用户对需求规格达成的共识。 两个用例之间的关系主要有两种情况:一种是用于重用的包含关系,用构造型include表示;另一种是用于分离出不同行为的扩展,用构造型extend表示。 ①包含关系:当可以从两个或两个以上的原始用例中提取公共行为,或者发现能够使用一个构件来实现某一个用例的部分功能是很重要的事时,应该使用包含关系来表示它们。 ②扩展关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多种事

情,可以断定将这个用例分为一个主用例和一个或多个辅用例描述可能更加清晰。

问题: [单选]对于违反里氏替换原则的两个类A和B,可以采用的候选解决方案是() A.尽量将一些需要扩展的类或者存在变化的类设计为抽象类或者接口,并将其作为基类,在程序中尽量使用基类对象进行编程 B.创建一个新的抽象类C,作为两个具体类的超类,将A和B共同的行为移动到C中,从而解决A和B 行为不完全一致的问题 C.将B到A的继承关系改成组合关系 D.区分是Is-a还是Has-a。如果是Is-a,可以使用继承关系,如果是Has-a,应该改成组合或聚合关系 里氏替换原则是面向对象设计原则之一,由BarbaraLiskov提出,其基本思想是,一个软件实体如果使用的是一个基类对象,那么一定适用于其子类对象,而且觉察不出基类对象和子类对象的区别,即把基类都替换成它的子类,程序的行为没有变化。反过来则不一定成立,如果一个软件实体使用的是一个子类对象,那么它不一定适用于基类对象。 在运用里氏替换原则时,尽量将一些需要扩展的类或者存在变化的类设计为抽象类或者接口,并将其作为基类,在程序中尽量使用基类对象进行编程。由于子类继承基类并实现其中的方法,程序运行时,子类对象可以替换基类对象,如果需要对类的行为进行修改,可以扩展基类,增加新的子类,而无须修改调用该基类对象的代码。

《C面向对象程序设计》谭浩强版复习总结

第一章C++ 基础 endl 换行并刷新输出流 setw(n) 设置字段位数为n hex,oct,dec 十六进制,八进制,十进制表示 setfill 定义填充字符 setprecision 定义浮点数的精度 left,right 左对齐,右对齐 showpoint 强制显示小数点以及全部尾部0 C++通过给常量命名的方式定义常量: const<数据类型名><常量名>=<表达式> 用const定义的标识符常量时,一定要对其初始化。在说明时进行初始化是对这种常量置值的唯一方法,不能用赋值运算符对这种常量进行赋值。 函数声明的一般形式为 函数类型函数名(参数表) 函数模板的定义 template 函数定义 例子:template T max(T a,T b){ return(a>b)? a:b; } 定义函数模板时可以使用多个类型参数,每个类型参数前面只需加上关键字typename或class,用逗号分隔: template

例子:template T1 max(T1 a,T2 b){ return (a>b) ? a : (T1)b; } 有默认参数的函数:实参与形参的结合是从左至右进行的,因此指定默认值的参数必须放在形参列表中的最右端 引用 定义对变量起另外一个名字(别名alias),这个名字称为该变量的引用。 <类型> &<引用变量名> = <原变量名>; 其中原变量名必须是一个已定义过的变量。如: int max ; int &refmax=max; refmax并没有重新在内存中开辟单元,只是引用max的单元。max与refmax在内存中占用同一地址,即同一地址两个名字。 对引用类型的变量,说明以下几点: 1、引用在定义的时候要初始化 2、对引用的操作就是对被引用的变量的操作。 3、引用类型变量的初始化值不能是一个常数。 4、一旦引用被声明,它就不能再指向其它的变量。 5、对引用的初始化,可以用一个变量名,也可以用另一个引用。 6、引用同变量一样有地址,可以对其地址进行操作,即将其地址赋给一指针。 当&m的前面有类型符时(如int &m),它必然是对引用的声明;如果前面无类型符(如cout<<&m),则是取变量的地址。 7、对常量(用const声明)的引用使用如下方式: int i=5; const int &a=i;

面向对象程序设计期末综合练习一(单选题)

22. 下列的符号常量定义中,错误的定义是()。 A. const M=10; B. const int M=20; C. const char ch; D. const bool mark=true; 40. 函数重载是指()。 A. 两个或两个以上的函数取相同的函数名,但形参的个数或类型不同 B. 两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同 C. 两个以上的函数名字不同,但形参的个数或类型相同 D. 两个以上的函数取相同的函数名,并且函数的返回类型相同 41. 以下关于函数模板叙述正确的是()。 A. 函数模板也是一个具体类型的函数 B. 函数模板的类型参数与函数的参数是同一个概念 C. 通过使用不同的类型参数,函数模板可以生成不同类型的函数 D. 用函数模板定义的函数没有类型 42. 下列()的调用方式是引用调用。 A. 形参和实参都是变量 B.形参是指针,实参是地址值 C. 形参是引用,实参是变量 D.形参是变量,实参是地址值

43. 为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择()。 A. 内联函数 B.重载函数 C.递归函数 D.函数模板 44. 函数原型语句正确的是()。 A. int Function(void a); B.void Function (int); C. int Function(a); D.void int(double a); 45. C++中函数返回值的类型是由()决定的。 A. return语句中表达式的类型 B.该函数定义时的类型 C.调用函数时的调用语句 D.系统根据结果 56. 采用重载函数的目的是()。 A. 实现共享 B. 减少空间 C. 提高速度 D. 使用方便,提高可读性 58. 以下叙述中正确的是( )。 A. 使用#define可以为常量定义一个名字,该名字在程序中可以再赋另外的值 B. 使用const定义的常量,其值在程序运行时是不可改变的 C. 在程序中使用内联函数使程序的可读性变差 D. 在定义函数时可以在形参表的任何位置给出缺省形参值 70. 用new运算符创建一个含10个元素的一维整型数组的正确语句是( )。 A. int *p=new a[10]; B. int *p=new float[10];

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

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

《面向对象程序设计C 》期末考试试卷

《面向对象程序设计C++》期末考试试卷 一、选择题(每小题3分,共48分。) 01、下列关于C++函数的叙述中,正确的是( C )。 A)每个函数至少要具有一个参数B)每个函数都必须返回一个值 C)函数在被调用之前必须先声明D)函数不能自己调用自己 02、下列关于类和对象的叙述中,错误的是( A )。 A)一个类只能有一个对象B)对象是类的具体实例 C)类是对某一类对象的抽象D)类和对象的关系是一种数据类型与变量的关系 03、在C++中,用于实现运行时多态性的是( D )。 A)内联函数B)重载函数C)模板函数D)虚函数 04、下列关于运算符重载的叙述中,正确的是( B )。 A)通过运算符重载,可以定义新的运算符B)有的运算符只能作为成员函数重载 C)若重载运算符+,则相应的运算符函数名是+ D)重载二元运算符时,必须声明两个形参 05、对于语句cout<

面向对象面试题

面向对象面试题 1、什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗的解释就是万物皆对象,把所有的事物都看作一个个可以独立的对象(单元),它们可以自己完成自己的功能,而不是像C那样分成一个个函数; 现在纯正的OO语言主要是java和C#,C++也支持OO,C是面向过程的。 2、简述private、protected、public、internal 修饰符的访问权限。 private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,没有访问限制。 internal: 当前程序集内可以访问。 3、https://www.doczj.com/doc/713304426.html,中的五个主要对象 Connection:主要是开启程序和数据库之间的连结。没有利用连结对象将数据库打开,是无法从数据库中取得数据的。这个物件在https://www.doczj.com/doc/713304426.html, 的最底层,我们可以自己产生这个对象,或是由其它的对象自动产生。 Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连结到数据源。 DataAdapter:主要是在数据源以及DataSet 之间执行数据传输的工作,它可以透过Comm and 对象下达命令后,并将取得的数据放入DataSet 对象中。这个对象是架构在Command 对象上,并提供了许多配合DataSet 使用的功能。 DataSet:这个对象可以视为一个暂存区(Cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来。DataSet 的能力不只是可以储存多个Table 而已,还可以透过DataAdapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。DataSet 对象可以说是https://www.doczj.com/doc/713304426.html, 中重量级的对象,这个对象架构在DataAdapter对象上,本身不具备和数据源沟通的能力;也就是说我们是将DataAdapter对象当做DataSet 对象以及数据源间传输数据的桥梁。 DataReader:当我们只需要循序的读取数据而不需要其它操作时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,而且这些数据是只读的,并不允许作其它的操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。使用DataReader 对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。 https://www.doczj.com/doc/713304426.html, 使用Connection 对象来连接数据库,使用Command 或DataAdapter对象来

C面向对象程序设计重点复习

面向对象程序设计复习题 一、单项选择题 1.下面关于对象概念的描述中,_______是错误的。(B) A.对象代表着正在创建的系统中的一个实体 B.对象就是C语言中的结构体变量 C.对象是一个状态和操作(或方法)的封装体 D.对象之间的信息传递是通过消息进行的 2. 继承机制的作用是:(C) A.信息隐藏B.数据封装C.定义新类D.数据抽象 3.有关析构函数的说法不正确的是_________(D) A.析构函数有且只有一个 B.析构函数无任何函数类型 C.析构函数没有形参 D.析构函数不能是虚函数 4.友元的作用之一是__________(A) A.提高程序的运行效率 B.加强类的封装性 C.实现数据的隐藏性 D.增加成员函数的种类 5.通常拷贝构造函数的参数是__________。(C) A.某个对象名 B.某个对象的成员名 C.某个对象的引用名 D.某个对象的指针名 6.如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是________。(C) A.virtual show()=0; B.virtual void show(); C.virtual void show()=0; D.void show=0 virtual; 7.下面关于友元的描述中,错误的是_________。(D) A.友元函数可以访问该类的私有数据成员 B.一个类的友元类中的成员函数都是这个类的友元函数 C.友元可以提高程序的运行效率 D.类与类之间的友元关系可以继承 8.在C++中,_________运算符不能重载。(B) A. + B.?: C.- D.<= 9.下列关于运算符重载的描述中,________是正确的。(D) A.运算符重载可以改变操作数的个数 B.运算符重载可以改变优先级 C.运算符重载可以改变结合性 D.运算符重载不可以改变语法结构

面向对象编程练习题库test

面向对象编程练习题库 t e s t Document serial number【KKGB-LBS98YT-BS8CB-BSUT-BST108】

面向对象编程练习题 专题1 初识Java 一、填空题 1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是()、()、()。 2.环境变量的设置,若JDK安装在“D:\JDK”,则应设置Path为()、classpath 为()。 3.Java源文件的扩展名为(),用Javac编译Java源文件,得到的字节码文件的扩展 名为()。 4.如果Java源文件中有多个类,那么只能有一个类是()类。 二、选择题 1.作为Java应用程序入口的main方法,其声明格式是() A.public static int main(String args[]) B.public static void main(String args[]) C.public void main(String args[]) D.public int main(String args[]) 2.下面命令正确的是() A.java B.java AppFirst C.java D.javac AppFirst 3.设有一个Java小程序,源程序名为,其HTML文件为,则运行该小程序的命令为 () A.java FirstApplet B.javac C.appletviewer D.appletviewer 4.JDK安装完成后,主要的命令如javac、java等,都存放在根目录的()文件夹下。A.bin B.jre C.include D.doc 5.Java语言是一种语言。 A.机器B.汇编C.面向过程的D.面向对 象的 6、Java程序的最基本组成单位是( )。

面向对象程序设计C期末试卷及标准答案B样本

《面向对象程序设计C++》期末考试试卷( B) 班级: 姓名: 学号: 分数: 试卷说明: 本套试题共四个大题, 全部题目都答在答题纸上, 写在其它地方均无效。 ( 答题纸在本套试卷的第8页上) 一、单项选择题( 每小题2分, 共40分) 1、关于C++与C语言关系的描述中, ( D ) 是错误的。 A.C语言是C++语言的一个子集 B.C语言与C++语言是兼容的 C.C++语言对C语言进行了一些改进 D.C++语言和C语言都是面向对象的 2、已知: int m=10; 下列表示引用的方法中, ( A ) 是正确的。 A.int &x=m; B.int &y=10; C.int &z; D.float &t=&m; 3、考虑下面的函数原型声明: void testDefaulParam(int a,int b=7,char z='*');下面函数调用中, 不合法的是( C ) 。 A.testDefaulParam(5); B.testDefaulParam(5,8); C.testDefaulParam(5,'#'); D.testDefaulParam(0,0,'*'); 4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用, 在下列选项中, 不能作为依据的是( A ) 。 A.函数的返回值类型 B.参数的类型 C.函数名称 D.参数个数 5、下列有关C++类的说法中, 不正确的是( D ) 。 A.类是一种用户自定义的数据类型 B.只有类中的成员函数或类的友元函数才能存取类中的私有成员 C.在类中, 如果不做特别说明, 所有成员的访问权限均为私有的

D.在类中, 如果不做特别说明, 所有成员的访问权限均为公用的 6、已知X类, 则当程序执行到语句X array[3];时, 调用了( D ) 次构造函数。 A.0 B.1 C.2 D.3 7、有关析构函数的说法, 不正确的是( B ) 。 A.析构函数有且仅有一个 B.析构函数和构造函数一样能够有形参 C.析构函数的功能是在系统释放对象之前作一些内存清理工作 D.析构函数无任何函数类型 8、类定义的内容允许被其对象无限制地存取的是( C ) 。 A.private 部分 B. protected 部分 C.public 部分 D.以上都不对9、关于常数据成员的说法, 不正确的是( D ) 。 A.常数据成员的定义形式与一般常变量的定义形式相同, 只不过常数据成员的定义必须出现在类体中 B.常数据成员必须进行初始化, 而且不能被更新 C.常数据成员经过构造函数的成员初始化列表进行初始化 D.常数据成员能够在定义时直接初始化 10、运用运算符delete删除一个动态对象时( C ) 。 A.系统首先为该动态对象调用构造函数, 再释放其占用的内存 B.系统首先释放该动态对象占用的内存, 再为其调用构造函数 C.系统首先为该动态对象调用析构函数, 再释放其占用的内存 D.系统首先释放动态对象占用的内存, 再为其调用析构函数 11、能够在类外用p.a的形式访问派生类对象p的基类成员a, 其中a是( D ) 。 A.私有继承的公用成员 B.公用继承的私有成员 C.公用继承的保护成员 D.公用继承的公用成员

面向对象考试题

第五章考试题 一、选择题:(每题3分,共20题) 1.下面关于类的说法错误的一项是()。 A、类属于Java语言中的复合数据类型 B、对象是Java语言 中的基本结构单位 C、类是同种对象的集合和抽象 D、类就是对象 2.如下所示代码: public class Test05_01{ private float a; public static void m ( ){ } } 如何使成员变量a被方法m( )访问()。 A、将private float a改为public float a B、将private float a改为static float a C、将private float a改为protected float a D、将private float a改为float a 3.下面关于类的说法有误的一项是()。 A、类就是对象 B、类是同种对象的集合和 抽象 C、类属于Java语言中的复合数据类型 D、对象是Java语言 中的基本结构单位

4.下列哪种类成员修饰符修饰的变量只能在本类中被访问()。 A、protected B、default C、private D、public 5.下面关于方法的说法不正确的一项是()。 A、类的私有方法不能被其他类直接访问。 B、Java中的构造方法名必须和类名相同。 C、方法体是对方法的实现,包括变量声明和合法语句。 D、如果一个类定义了构造方法,也可以用该类的默认构造方法。 6.下列程序的运行结果是()。 public class Test05_02 extends x{ int ab(){ static int a = 10; a++; System.out.println(a); } public static void main(String[] args) { Test05_02 b = new Test05_02 (); b.ab(); } } A、10 B、编译错误 C、11 D、运行成功,但不输出

面向对象程序设计考试题库

面向对象程序设计期末综合练习一(单选题) 单选题 1. C++源程序文件的缺省扩展名为( )。 A. cpp B. exe C. obj D. lik 2. 由C++源程序文件编译而成的目标文件的缺省扩展名为( )。 A. cpp B. exe C. obj D. lik 3. 由C++目标文件连接而成的可执行文件的缺省扩展名为( )。 A. cpp B. exe C. obj D. lik 4. 编写C++程序一般需经过的几个步骤依次是( )。 A. 编译、编辑、连接、调试 B. 编辑、编译、连接、调试 C. 编译、调试、编辑、连接 D. 编辑、调试、编辑、连接 5. 以下标识符中不全是保留字的是( )。 A. case for int B. default then while C. bool class long D. goto return char 6. 能作为C++程序的基本单位是( )。 A. 字符 B. 语句 C. 函数 D. 源程序文件 7. 程序中主函数的名字为( )。 A. main B. MAIN C. Main D. 任意标识符 8. C++程序的基本模块为( )。 A. 表达式 B. 标识符 C. 语句 D. 函数 9. 可用作C++语言用户标识符的一组标识符是( )。 A. void define +WORD B. a3_b3 _123 YN C. for -abc Case D. 2a DO sizeof 10. 存储以下数据,占用存储字节最多的是( )。 A. 0 B. …0? C. “0” D. 0.0 11. 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用( )符号作为分隔符。 A. 空格或逗号 B. 逗号或回车 C. 逗号或分号 D. 空格或回车 12. 设”int a=12;”,则执行完语句”a+=a*a;”后,a 的值是( )。 A. 12 B. 144 C. 156 D. 288 13. 假设在程序中 a 、b 、c 均被定义成整型,所赋的值都大于1,则下列能正确表示代数式abc 1的表达式是( )。 A. 1.0/a*b*c B. 1/(a*b*c) C. 1/a/b/(float)c D. 1.0/a/b/c 14. 设”int a=15,b=26;”,则”cout<<(a,b);”的输出结果是( )。 A. 15 B. 26,15 C. 15,26 D. 26

c面向对象复习题答案版

c面向对象复习题答案 版 Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#

一、填空题 ++中有两种数据类型:( char )和( int long )可以使用signed修饰符。 在C++中,用数组、指针、和( 引用 )作为函数参数,能够将参数值带回。 2.为了降低函数调用的时间开销,建议将小的调用频繁的函数定义为(内联函数),方法是在函数类型前加上(inline)关键字。 3.面向对象的程序设计有四大特征,它们是抽象、封装、( 继承 )、( 多态 )。 4.拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是( 把对象的每个数据成员的值都复制到新建立的对象中)。 5.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到(该类的)构造函数,否则应用程序会产生一个编译错误。 6.静态数据成员必须在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象( 共享 )。 7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型( 不同 )。 8.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的( 封装 )特性。 9.预编译指令由三种,它们是:文件包含、( 宏定义 )和( 条件编译 )。 10.静态的成员函数没有隐含的( this ),所以,它们只能直接访问类的静态的数据成员。 11.在C++中,函数的参数有两种传递方式,它们是值传递和( 地址 )。 12.当非静态成员函数被调用时,该成员函数的( this )指向调用它的对象。 13.拷贝构造函数使用( 引用 )作为参数初始化创建中的对象。 14.在公有继承的情况下,基类数据成员在派生类中的访问权限( 不变 )。 15.在C++中,构造派生类对象时,总是先从( 基类 )的初始化开始的。 16.当需要统计程序中某个类创建对象的个数时,需要给该类定义(静态数据)成员。 17.在多个类之间有重复继承时,为避免被重复继承的基类数据成员在内存中有多个拷贝,应将该基类定义为(虚基类)。 18.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为( 抽象类 ),定义该类至少具有一个( 纯虚函数 )。 19.在C++中构造一个对象时,其数据成员在构造函数中初始化。对于内嵌的对象、( 常量 )、( 引用 )数据成员需要在构造函数的成员初始化列表中初始化。 20.在类的定义中,说明为protected的数据成员称为保护成员。保护数据成员具有双重作用:对于其派生类而言,( 可以访问 );而对于其外部的程序而言,( 不可以访 问 )。 21.控制格式输出的 操纵符中,(setprecision)是设置数据精度的,( hex)是设置十六进制的。 22.如果s是int型变量,且s=6,则下面s%2+(s+1)%2表达式的值为__0_ _。

面向对象笔试题

一、填空题 1 Java中一个类可以有个父类。 2 如果一个类的声明中没有使用extends关键字,这个类被系统默认为是类的子类。 3 子类自然地继承了其父类中不是的成员变量作为自己的成员变量。 4 当子类中定义的成员变量和父类中的成员变量同名时,子类的成员变量了父类的成员变量。 5 子类通过成员变量的隐藏和方法的可以把父类的状态和行为改变为自身的状态和行为。 6 对于重写或继承的方法,Java运行时系统根据调用方法的的类型来选择调用哪个方法。 7 对于子类创建的一个对象,如果子类重写了父类的方法,则运行时系统调用的方法。 8 对于子类创建的一个对象,如果子类继承了父类的方法,未重写,则运行时调用______的方法。 9 在Java语言中多态性体现在由方法重载实现的静态多态性和实现的动态多态性。 10 类不能被继承,即不能有子类。 11 类不能创建对象,必须产生其子类,由子类创建对象。 12 如果一个方法被修饰为方法,则这个方法不能被重写。 13 对于方法,只允许声明,而不允许实现。 14 如果一个方法被修饰为final方法,则这个方法不能。 15 如果一个类是一个abstract类的子类,它必须具体实现的abstract方法。 16 局部变量的名字与成员变量的名字相同,若想在该方法内使用成员变量,必须使用关键字。 17 在关键字中能代表当前类或对象本身的是。 18 如果在子类中想使用被子类隐藏的父类的成员变量或方法可以使用关键字。 19 子类如果想用父类的构造方法,必须在子类的构造方法中使用,并且必须使用关键字____ 来表示。 20 如果在子类中想使用被子类隐藏了的父类成员变量或方法就可以使用关键字。 21 Java中为了克服的缺点,使用了接口,一个类可以实现多个接口。 22 就是方法定义和常量值的集合。 23 使用关键字来定义接口。 24 接口定义包括接口的声明和。 25 一个类通过使用关键字声明自己实现一个或多个接口。 26 如果一个类实现了某个接口,那么这个类必须实现该接口的。 27 接口中的方法被默认的访问权限是。 28 接口的定义包括和接口体。 29 定义接口时,接口体中只进行方法的声明,不允许提供方法的。 30 如果接口中的方法的返回类型不是void的,那么在类中实现该接口的方法时,方法体至少要有一个语句。 31 指那些类定义代码被置于其他类定义中的类。 32 是Java SE5.0的新特性。

面向对象的程序设计试题库

面向对象的程序设计 一、单项选择题 1、下面那种结构不是C++的控制结构() A 顺序结构 B 选择结构 C 循环结构 D 判断结构 答: D 2、下列是C++语言中合法标识符的是()。 A.3three B.if C._1one D.while 答:C 3、下列是合法的C++语言语句的是()。 A.if(x>0) then x=x-1;else x=x+1; B.if(x>0) x=x-1;else x=x+1; C.if x>0 x=x-1;else x=x+1; D.if x>0 x=x-1; 答:B 4、下面那一种不是计算机内部表示整数的方法() A 二进制码B原码 C 补码D反码 答:A 5、在C++语言中,下列数为合法的实数的是()。 A.5E-3 B.5E-3.5 C. E5 D.-3.5E 答:A 6、C++语言中数据类型最大的是() A long B float C int D char

答:B 7、如果一个函数可以在定义中直接或间接的调用自己,这样的函数称为( )。 A.函数声明 B.嵌套函数 C.定义函数 D.递归函数 答:D 8、表达式0x55^0xB4的结果为()。 A.0xF5 B.0x15 C.0xE1 D.0x1E 答:C 9、C++中,源代码文件后缀为() A .cpp B .obj C .exe D .c 答: A 10、0X5A&0XB7结果是() A 0X13 B 0X12 C 0X14 D 0X15 答: B 二、填空题 1、程序的基本控制结构包括()、()和( )。 答:顺序结构,选择结构,循环结构 2、用来解决问题的,与有限多个步骤组成的具体过程称为()。 答:算法 3、整数类型变量a和b被初始化为3和10,则循环语句while(a<=b) a=a+2;共执行()次,执行完语句后a的值为(),b的的值为()。

《面向对象程序设计JAVA语言程序设计》期末考试试题及部分答案

一、单选题 1.在下列概念中,Java语言只保留了D A.运算符重载B.结构和联合C.指针D.方法重载 2.下列类定义中,不正确的是B A.class x { .... } B.static class x implements y1,y2 { .... } C.public class x extends Applet { .... } D.class x extends y { .... } 3.下列语句序列执行后,k 的值是B int m=3, n=6, k=0; while( (m++) < (- - n) ) ++k; i++ 先把i的初值赋给表达式(i++),作为表达式(i++)的值,然后i自增 1作为i的值。 如i=1,则表达式(i++)的值等于1,而i的值变为2。 ++i i先自增1,再把自增后的值赋给表达式(++i)。 如i=1,则表达式(++i)的值等于2,i的值也为2, A.0 B.1 C.2 D.3 4.设i、j为int型变量名,a为int型数组名,以下选项中,正确的赋值语句是A A.a[0] = 7; B.i = i + 2 C.i++ - --j; D.a(0) = 66; 5.Java语言的类间的继承关系是B A.多重的B.单重的C.线程的D.不能继承 6.下列语句序列执行后,k 的值是C int i=10, j=18, k=30; switch( j - i ) { case 8 : k++; case 9 : k+=2; case 10: k+=3; default : k/=j; } A.31 B.3 C.2 D.33 7.设有定义float x=3.5f, y=4.6f, z=5.7f;则以下的表达式中,值为true的是C A.x > y || x > z B.z > ( y + x ) C.x != y D.x < y & ! ( x < z )

c面向对象复习题答案版

一、填空题 ++中有两种数据类型:( char )和( int long )可以使用signed修饰符。在C++中,用数组、指针、和( 引用 )作为函数参数,能够将参数值带回。 2.为了降低函数调用的时间开销,建议将小的调用频繁的函数定义为(内联函数),方法是在函数类型前加上(inline)关键字。 3.面向对象的程序设计有四大特征,它们是抽象、封装、( 继承 )、( 多态 )。 4.拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是( 把对象的每个数据成员的值都复制到新建立的对象中)。 5.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到(该类的)构造函数,否则应用程序会产生一个编译错误。 6.静态数据成员必须在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象( 共享 )。 7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型( 不同 )。 8.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的( 封装 )特性。 9.预编译指令由三种,它们是:文件包含、( 宏定义 )和( 条件编译 )。 10.静态的成员函数没有隐含的( this ),所以,它们只能直接访问类的静态的数据成员。 11.在C++中,函数的参数有两种传递方式,它们是值传递和( 地址 )。 12.当非静态成员函数被调用时,该成员函数的( this )指向调用它的对象。 13.拷贝构造函数使用( 引用 )作为参数初始化创建中的对象。 14.在公有继承的情况下,基类数据成员在派生类中的访问权限( 不变 )。 15.在C++中,构造派生类对象时,总是先从( 基类 )的初始化开始的。 16.当需要统计程序中某个类创建对象的个数时,需要给该类定义(静态数据)成员。 17.在多个类之间有重复继承时,为避免被重复继承的基类数据成员在内存中有多个拷贝,应将该基类定义为(虚基类)。 18.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为( 抽象类 ),定义该类至少具有一个( 纯虚函数 )。 19.在C++中构造一个对象时,其数据成员在构造函数中初始化。对于内嵌的对象、( 常量 )、( 引用 )数据成员需要在构造函数的成员初始化列表中初始化。 20.在类的定义中,说明为protected的数据成员称为保护成员。保护数据成员具有双重作用:对于其派生类而言,( 可以访问 );而对于其外部的程序而言,( 不可以访问 )。 21.控制格式输出的 操纵符中,(setprecision)是设置数据精度的,( hex)是设置十六进制

面向对象编程练习题库 test

面向对象编程练习题 专题1 初识Java 一、填空题 1.自从Sun推出Java以来,按应用范围可分为三个版本,分别是()、()、()。2.环境变量的设置,若JDK安装在“D:\JDK”,则应设置Path为()、classpath为()。 3.Java源文件的扩展名为(),用Javac编译Java源文件,得到的字节码文件的扩展名 为()。 4.如果Java源文件中有多个类,那么只能有一个类是()类。 二、选择题 1.作为Java应用程序入口的main方法,其声明格式是() A.public static int main(String args[]) B.public static void main(String args[]) C.public void main(String args[]) D.public int main(String args[]) 2.下面命令正确的是() A.java B.java AppFirst C.java D.javac AppFirst 3.设有一个Java小程序,源程序名为,其HTML文件为,则运行该小程序的命令为()A.java FirstApplet B.javac C.appletviewer D.appletviewer 4.JDK安装完成后,主要的命令如javac、java等,都存放在根目录的()文件夹下。A.bin B.jre C.include D.doc 5.Java语言是一种语言。 A.机器B.汇编C.面向过程的D.面向对象的 6、Java程序的最基本组成单位是( )。 A.函数B.过程C.变量D.类 7. main()方法的返回值类型是()。 A.boolean B.int C. void D.static 8. 下面哪个单词是Java语言的关键字()A.False B.FOR C.For D.for

面向对象专题练习

**专题5 面向对象 一、填空题 1.如果一个方法不返回任何值,则该方法的返回值类型为void 。(//有无返回值的意义何在???) 2.如果子类中的某个方法名、返回值类型和_参数列表_____与父类中的某个方法完全一致,则称子类中的这个方法覆盖了父类的同名方法。 3.接口中所有的属性均为_public_、_final_____和_static__的,方法(public abstract ) 4.抽象方法是一种仅有方法声明,没有具体方法体和操作实现的方法,该方法必须在具体类之中定义。 5.在Java程序中,通过类的定义只能实现单重继承,但通过接口的定义可以实现多重继承关系。 6.一般Java程序的类主体由两部分组成:一部分是属性,另一部分是方法。7.分别用class关键字来定义类,用new关键字来分配实例存储空间。 8.当一个类的修饰符为final时,说明该类不能被继承,即不能有子类。9.在Java中,能实现多重继承效果的方式是接口。 二、选择题 1.方法内定义的变量(B)。 A.一定在方法内所有位置可见B.可能在方法的局部位置可见(for循环)C.在方法外可以使用D.在方法外可见 2.方法的形参()。 A.可以没有B.至少有一个 C.必须定义多个形参D.只能是简单变量 3.return语句()。 A.不能用来返回对象B.只可以返回数值 C.方法都必须含有D.一个方法中可以有多个(但是返回只有一个)

4.main()方法的返回值类型是() A.boolean B.int C.void D.static 5.编译并运行下面的程序,运行结果是()。 public class A{ public static void main(String args[]){ A a=new A(); a.method(8); } void method(int i){ System.out.println(“int: ”+i); } void method(long i){ System.out.println(“long: ”+i); } A.程序可以编译运行,输出结果为:“int: 8” B.程序可以编译运行,输出结果为:“long: 8” C.程序有编译错误,因为两个method()方法必须定义为静态(static)的D.程序可以编译运行,但是没有输出 6.能作为类及其成员的修饰符是()。 A.interface B.class C.protected D.public 7.下列方法定义中,方法头不正确的是()。 A.public static x(double a){…} B.public static int x(double y){…} C.void x(double d){…} D.public int x(){…} 8.构造方法在()时被调用。 A.类定义时B.使用对象的变量时 C.调用对象方法时D.创建对象时 9.下列哪个类声明是正确的()。 A.public abstract class Car{…} B.abstract private move(){…} C.protected private number; D.abstract final class H1{…} 10.下列不属于面向对象程序设计的基本特征的是()。 A.抽象B.封装 C.继承D.静态 11.请看下面的程序段 class Person{ String name,department; int age;

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