2011面向对象C++期末复习习题练习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
2定义一个复数类,类中包括real和image两个数据成员,定义合适的构造函数,重载“+”,“-”,“=”三个运算符。并在主函数中测试。
#include <iostream.h>
class complex{
public:
complex(){real=0.0;image=0.0;}
complex(double r,double i){real=i;image=i;}
2011
一、选择题
( D )1、C++对C语言作了很多改进,下列描述中使得C语言发生了质变。
A、增加一些新的运算符B、允许函数重载,并设置默认参数
C、规定函数说明必须用原形D、引进了类和对象的概念
( D ) 2、下列关于指针的运算中,是非法的。
A、在一定条件下,可以进行相等或不相等的运算
B、可以用一个空指针赋值给某一个指针
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);
( 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、下列变量名中,非法的是()。
}
5、设计一个单继承的类层次程序
1)基类Person中有“姓名”、“年龄”等数据成员,包含的成员函数有voidPrintNameAge()、构造函数和析构函数,其中PrintNameAge()输出Person对象的“姓名”、“年龄”等数据成员。
2)派生类Student从Person公有继承,增加数据成员“学号(No)”,包含的成员函数有void PrintNo()、void PrintNameAge()、构造函数和析构函数,其中PrintNameAge()输出学生对象的“姓名”、“年龄”等数据成员,PrintNo()输出学生对象的学号。
C、double area(doublea, double b=3.0,double c); D、double area(double a,double b=3,double c=4);
( D )11、下列各种高级语言中,不是面向对象的程序设计语言是()。
A.C++B.JavaC.vb.netD.C
( C ) 19、下列运算符中不能重载的是()
A、+B、=C、?:D、new
( D ) 20、下列关于多继承二义性的描述中,错误的是()。
A.一个派生类的多个基类中出现了同名成员时,派生类对同名成员的访问可能出现二义性
B.一个派生类有多个基类,而这些基类又有一个共同的基类,派生类访问公共基类成员时,可能出现二义性
{
No=no;
}
Student::~Student()
{}
void Student::PrintNameAge()
{cout<<"student:"<<endl;
Person::PrintNameAge();
}
void Student::PrintNo()
{cout<<"No:"<<No<<endl;
A.A25B.My_carC.My-strD.abc
( C ) 14、下列关于常成员的描述中,错误的是()。
A.常成员是用关键字const说明的
B.常成员有常数据成员和常成员函数两种
C.常数据成员的初始化是在类体内定义它时进行的
D.常数据成员的值是不可以改变的
( A ) 15、已知:inta(5),&ra=a;下列描述中,错误的是()。
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;
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.ra是变量a的引用,即为变量的别名B.ra的值为5
C.ra的地址值为&aD.改变ra的值为10,变量a值仍为5
( D ) 16、下列关于运算符new的描述中,错误的是()。
A.它可以创建对象或变量B.它可以创建对象数组或一般类型数组
C.用它创建对象或对象数组时要调用相应的构造函数D.用它创建的对象可以不用delete运算符释放
~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;
void displaytime(){cout<<hour<<" hour "<<minute<<" minute "<<second<<" second"<<endl;}
private:
int hour,minute,second;
};
class datetime:public date,public time{
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();
( A ) 5、友元的作用是
A、提高程序的效率B、加强类的封装C、实现数据的隐藏性D、增加成员函数的种类
( C ) 6、下列运算符中不能重载的是
A、&&B、[]C、::D、new
( C ) 7、关于虚函数的描述中,是正确的。
A、虚函数是一个static类型的成员函数
B、虚函数一个非成员函数
C、基类中说明了虚函数后,派生类中与其对应的函数可以不必说明为虚函数
b)通过p把a的值改为10,输出a的值;
c)通过r把a的值改为5,输出a的值。
#include<iostream.h>
void main()
{
int a,*p=&a;
int &r=a;
*p=10;cout<<"通过指针修改a的值为"<<a<<endl;
r=5;cout<<"通过引用修改a的值为"<<a<<endl;
publiHale Waihona Puke Baidu:
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){
#include <iostream.h>
void main(){
int i,j;
for(i=1,j=0;i<=100;i++)
if(i%9==0){
cout<<i<<'\t';
j++;
if(j%5==0) cout<<endl;
}
}
4、设计一个含有指针类型的程序:
a)定义一个整型变量a,一个整型指针p,一个引用r。
private:
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;}
3)其它成员函数根据需要添加。在主函数中创建一个学生类的对象:Student s("sally",20,1001),调用PrintNameAge()和PrintNo()进行测试。
#include<iostream.h>
#include<string.h>
class Person
{
public:
Person(){}
}
Person::~Person()
{
delete []Name;
}
void Person::PrintNameAge()
{
cout<<"name:"<<Name<<endl;
cout<<"age:"<<Age<<endl;
}
Student::Student(char *name,int age,int no):Person(name,age)
C.解决二义性的方法是采用类名限定
二、编程
1、编写一个程序,程序中首先声明日期(年,月,日)类Date和时间(时,分,秒)类Time,并由这两个基类派生出日期时间类DateTime,最后在主函数中分别用类的默认构造函数和重载构造函数声明类DateTime类的对象,测试类声明的正确性。
#include <iostream.h>
}
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。并用数据在主函数中测试、输出结果。
void setcomplex(double r,double i){real=i;image=i;}
void display(){cout<<"real is "<<real<<'\t'<<"image is "<<image<<endl;}
complex& operator+(complex& c){
( D ) 17、下列选择重载函数的不同实现的判断条件中,错误的是()。
A.参数类型不同B.参数个数不同
C.参数顺序不同D.函数返回值不同
( C ) 18、下列关于构造函数的描述中,错误的是()。
A.构造函数可以重载B.构造函数名同类名
C.带参数的构造函数具有类型转换作用D.构造函数是系统自动调用的
};
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整除的所有整数。
D、派生类的虚函数与基类的虚函数具有不同的参数个数和类型
( C ) 8、抽象类是指
A、没有实现的类B、含有虚函数的类C、含有纯虚函数的类D、以上都不是
( B ) 9、动态释放内存的运算符为:
A、new B、deleteC、mallocD、free
( D ) 10、以下声明正确的为
A、double area(double a=2.6,double b); B、double area(double =2.6,double b,double =4);
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<<year <<" year "<<month<<" month "<<day<<" day "<<endl;}
2定义一个复数类,类中包括real和image两个数据成员,定义合适的构造函数,重载“+”,“-”,“=”三个运算符。并在主函数中测试。
#include <iostream.h>
class complex{
public:
complex(){real=0.0;image=0.0;}
complex(double r,double i){real=i;image=i;}
2011
一、选择题
( D )1、C++对C语言作了很多改进,下列描述中使得C语言发生了质变。
A、增加一些新的运算符B、允许函数重载,并设置默认参数
C、规定函数说明必须用原形D、引进了类和对象的概念
( D ) 2、下列关于指针的运算中,是非法的。
A、在一定条件下,可以进行相等或不相等的运算
B、可以用一个空指针赋值给某一个指针
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);
( 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、下列变量名中,非法的是()。
}
5、设计一个单继承的类层次程序
1)基类Person中有“姓名”、“年龄”等数据成员,包含的成员函数有voidPrintNameAge()、构造函数和析构函数,其中PrintNameAge()输出Person对象的“姓名”、“年龄”等数据成员。
2)派生类Student从Person公有继承,增加数据成员“学号(No)”,包含的成员函数有void PrintNo()、void PrintNameAge()、构造函数和析构函数,其中PrintNameAge()输出学生对象的“姓名”、“年龄”等数据成员,PrintNo()输出学生对象的学号。
C、double area(doublea, double b=3.0,double c); D、double area(double a,double b=3,double c=4);
( D )11、下列各种高级语言中,不是面向对象的程序设计语言是()。
A.C++B.JavaC.vb.netD.C
( C ) 19、下列运算符中不能重载的是()
A、+B、=C、?:D、new
( D ) 20、下列关于多继承二义性的描述中,错误的是()。
A.一个派生类的多个基类中出现了同名成员时,派生类对同名成员的访问可能出现二义性
B.一个派生类有多个基类,而这些基类又有一个共同的基类,派生类访问公共基类成员时,可能出现二义性
{
No=no;
}
Student::~Student()
{}
void Student::PrintNameAge()
{cout<<"student:"<<endl;
Person::PrintNameAge();
}
void Student::PrintNo()
{cout<<"No:"<<No<<endl;
A.A25B.My_carC.My-strD.abc
( C ) 14、下列关于常成员的描述中,错误的是()。
A.常成员是用关键字const说明的
B.常成员有常数据成员和常成员函数两种
C.常数据成员的初始化是在类体内定义它时进行的
D.常数据成员的值是不可以改变的
( A ) 15、已知:inta(5),&ra=a;下列描述中,错误的是()。
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;
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.ra是变量a的引用,即为变量的别名B.ra的值为5
C.ra的地址值为&aD.改变ra的值为10,变量a值仍为5
( D ) 16、下列关于运算符new的描述中,错误的是()。
A.它可以创建对象或变量B.它可以创建对象数组或一般类型数组
C.用它创建对象或对象数组时要调用相应的构造函数D.用它创建的对象可以不用delete运算符释放
~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;
void displaytime(){cout<<hour<<" hour "<<minute<<" minute "<<second<<" second"<<endl;}
private:
int hour,minute,second;
};
class datetime:public date,public time{
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();
( A ) 5、友元的作用是
A、提高程序的效率B、加强类的封装C、实现数据的隐藏性D、增加成员函数的种类
( C ) 6、下列运算符中不能重载的是
A、&&B、[]C、::D、new
( C ) 7、关于虚函数的描述中,是正确的。
A、虚函数是一个static类型的成员函数
B、虚函数一个非成员函数
C、基类中说明了虚函数后,派生类中与其对应的函数可以不必说明为虚函数
b)通过p把a的值改为10,输出a的值;
c)通过r把a的值改为5,输出a的值。
#include<iostream.h>
void main()
{
int a,*p=&a;
int &r=a;
*p=10;cout<<"通过指针修改a的值为"<<a<<endl;
r=5;cout<<"通过引用修改a的值为"<<a<<endl;
publiHale Waihona Puke Baidu:
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){
#include <iostream.h>
void main(){
int i,j;
for(i=1,j=0;i<=100;i++)
if(i%9==0){
cout<<i<<'\t';
j++;
if(j%5==0) cout<<endl;
}
}
4、设计一个含有指针类型的程序:
a)定义一个整型变量a,一个整型指针p,一个引用r。
private:
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;}
3)其它成员函数根据需要添加。在主函数中创建一个学生类的对象:Student s("sally",20,1001),调用PrintNameAge()和PrintNo()进行测试。
#include<iostream.h>
#include<string.h>
class Person
{
public:
Person(){}
}
Person::~Person()
{
delete []Name;
}
void Person::PrintNameAge()
{
cout<<"name:"<<Name<<endl;
cout<<"age:"<<Age<<endl;
}
Student::Student(char *name,int age,int no):Person(name,age)
C.解决二义性的方法是采用类名限定
二、编程
1、编写一个程序,程序中首先声明日期(年,月,日)类Date和时间(时,分,秒)类Time,并由这两个基类派生出日期时间类DateTime,最后在主函数中分别用类的默认构造函数和重载构造函数声明类DateTime类的对象,测试类声明的正确性。
#include <iostream.h>
}
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。并用数据在主函数中测试、输出结果。
void setcomplex(double r,double i){real=i;image=i;}
void display(){cout<<"real is "<<real<<'\t'<<"image is "<<image<<endl;}
complex& operator+(complex& c){
( D ) 17、下列选择重载函数的不同实现的判断条件中,错误的是()。
A.参数类型不同B.参数个数不同
C.参数顺序不同D.函数返回值不同
( C ) 18、下列关于构造函数的描述中,错误的是()。
A.构造函数可以重载B.构造函数名同类名
C.带参数的构造函数具有类型转换作用D.构造函数是系统自动调用的
};
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整除的所有整数。
D、派生类的虚函数与基类的虚函数具有不同的参数个数和类型
( C ) 8、抽象类是指
A、没有实现的类B、含有虚函数的类C、含有纯虚函数的类D、以上都不是
( B ) 9、动态释放内存的运算符为:
A、new B、deleteC、mallocD、free
( D ) 10、以下声明正确的为
A、double area(double a=2.6,double b); B、double area(double =2.6,double b,double =4);
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<<year <<" year "<<month<<" month "<<day<<" day "<<endl;}