一、 填空题(每空1分,共14分)
1、 观看以下程序:
class point{
public:
void show() {cout<<”point”<<endl;}
};
void main()
{
point p1;
point *p;
p=&p1;
___p1.show()____//通过对象p1访问show函数
____p->show()__//通过指针p访问show函数
}
2、 在C++类中可以包含__公有__、私有__和___保护___三种具有不同访问控制权的成员。
3、 定义类时,在类头中将使用关键字___class______来表示类定义的开始。
4、 如果一个类中至少有一个纯虚函数,则该类称为_____抽象类_____。
5、 C++类的组成包括数据成员和___成员函数__,友元_不是__(是、不是)该类的成员函数。
6、 友员函数是用关键字__friend___修饰的非成员函数。
7、 若有:
int i;
int &j=i;
i=10;
j=i+1;
则i=_11__,j=_11__。
8、 new的功能是___动态申请内存空间___,delete的功能是___释放由new申请的空间____。
二、 选择题(每小题1.5分,共30分)
1、下列特性中不是面向对象程序设计语言所特有的是( D )。
(A)数据封装 (B)继承(C)多态性 (D)模板
2、( B )是给变量取一个别名,它引入了变量的同意词。
(A)指针 (B)引用 (C)枚举 (D)结构
3、类成员的访问权限中,( C )只能被本类的成员函数和其友元函数访问。
(A)share (B)public (C)private (D)protected
4、关于构造函数,下列说法不正确的是( D )。
(A)构造函数名字和类名相同
(B)构造函数在创建对象时自动执行
(C)构造函数无任何函数返回类型
(D)构造函数有且只有一个
5、派生类可以访问其基类的( D )。
(A)公有成员 |
(B)保护成员 |
(C)私有派生 |
(D)公有和保护成员 |
6、下列关于运算符重载的描述中,错误的是( B )。
(A)运算符重载不可以改变操作数的个数 |
(B)运算符重载不可以改变运算符的功能 |
(C)运算符重载不可以改变结合方向 |
(D)运算符重载不可以改变运算优先级 |
7、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是( B )
(A)面向过程 (B)面向对象 (C)安全性 (D)复用性
8、对于类中定义的成员,其隐含访问权限为( C )。
A.public B.protected
C.private D.static
9、下面有关重载函数的说法中正确的是( C )
(A)重载函数必须具有不同的返回值类型; (B)重载函数形参个数必须不同;
(C)重载函数必须有不同的形参列表 (D)重载函数名可以不同;
10、有如下的对类“CSample”的说明,其中( A )是错误的。
class CSample {
A.int a=23;
B.CSample();
public:
C.CSample(int val);
D.~ CSample();
11、在int a=3,int *p=&a;中,*p的值是( D )
A.变量a的地址值 B.无意义
C.变量p的地址值 D.3
12、每个类( C)构造函数。
(A)只能有一个 (B)只可有公有的
(C)可以有多个 (D)只可有缺省的
13、在一个类中可以对一个操作符进行( D )重载。
(A)1 种 (B)2 种以下 (C)3 种以下 (D)多种
14、在公有继承的情况下,基类非私有成员在派生类中的访问权限(B )
(A) 受限制 (B)保持不变 (C)受保护 (D)不受保护
15、应在下列程序划线处填入的正确语句是(C )
#include <iostream.h>
class Base
{public:
void fun(){cout<<"Base::fun"<<ENDL;}
};
class Derived:public Base
{ void fun()
{_____________//显示调用基类的函数fun()
cout<<"Derived::fun"<<ENDL;
}
};
(A)fun(); (B)Base.fun(); (C)Base::fun(); (D)Base->fun();
16、执行下面的程序将输出( A )
#include <iostream.h>
class BASE{
char c;
public:
BASE(char n):c(n){}
virtual ~BASE(){cout<<c;}
};
class DERIVED:public BASE{
char c;
public:
DERIVED(char n):BASE(n+1),c(n){}
~DERIVED(){cout<<c;}
};
int main()
{DERIVED a(‘X‘);
return 0;
}
(A)XY (B)YX (C)X (D)Y
17、 下面描述中,表达错误的是( B )
(A)公有继承时基类中的public成员在派生类中仍是public的
(B)公有继承是基类中的private成员在派生类中仍是private的
(C)公有继承时基类中的protected成员在派生类中仍是protected的
(D)私有继承时基类中的public成员在派生类中是private的
18、定义析构函数时,应该注意( C )
(A)其名与类名完全相同 (B)返回类型是 void 类型
(C)无形参,也不可重载 (D)函数体中必须有 delete 语句
19、对于在类中定义的静态数据成员,下面正确的说法是( C )
A.该类的每个对象中都有一个静态数据成员
B.对象创建时产生
C.在类外进行初始化
D.既可以在类外初始化,也可以在类内初始化
20、C++中声明常量的关键字是( A )。
A. const B. extern C. public D. enum
三、 改错题(每处2分,共6分)
1、 使用VC6打开考生文件夹下的工程proj1,此工程包含一个源程序文件main.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:
member=0
member=5
menber=10
源程序文件main.cpp清单如下:
#include <iostream.h>
class MyClass
{
public:
MyClass(int i){member=i;}
void SetMember(int m){member=m;}
int GetMember()const{return menber;}
void print()cont{cout<<"member="<<MEMBER<<ENDL;}
private:
int member;
};
void main()
{
MyClass obj1;
obj1.print();
MyClass obj2(3);
obj1.member=5;
MyClass.SetMember(10);
obj1.print();
obj2.print();
}
答案:MyClass obj1(0); obj1.SetMember(5); obj2.SetMember(10);
四、 写出下列程序的执行结果(每小题5分,共20分)
1、
#include<iostream.h>
class Sample
{ int n;
public:
Sample(int i){n=i;}
friend int add(Sample &s1,Sample &s2);
};
int add(Sample &s1,Sample &s2)
{
return s1.n+s2.n;
}
void main()
{
Sample s1(10),s2(20);
cout<<add(s1,s2)<<endl;
}
执行结果是:30
2、
#include<iostream.h>
int add(int x,int y)
{
return x+y+1;
}
double add(double x,double y)
{
return x+y-1;
}
void main()
{
int a=2,b=4;
double c=2.6,d=7.4;
cout<<add(a,b)<<","<<add(c,d)<<endl;
}
执行结果是:7 9
3、
#include<iostream.h>
class A
{
public:
int n;
};
class B:virtual public A{};
class C:virtual public A{};
class D:public B,public C
{
int getn(){return B::n;}
};
void main()
{
D d;
d.B::n=10;
d.C::n=20;
cout<<d.B::n<<","<<d.C::n<<endl;
}
执行结果是:20 20
4、
#include <iostream.h>
class myclass
{
int a,b;
static int s;
public:
myclass(int x,int y)
{a=x;b=y;s++;}
void print()
{cout<<s<<endl;}
};
int myclass::s=0;
void main()
{
myclass m1(1,2),m2(4,5),m3(6,7);
m1.print();
m2.print();
m3.print();
}
执行结果是:3
3
3
五、 编程题(每题10分、共30分)
1、 测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。(10分)
1、
#include <iostream.h>
#include <math.h>
class rectangle //(2分)
{
private:
int x1,y1,x2,y2; // (2分)
public:
rectangle(int xx1,int yy1,int xx2,int yy2) //(1分)
{x1=xx1;y1=yy1;x2=xx2;y2=yy2;}
int getarea() //(2分)
{return abs((x2-x1)*(y1-y2));}
};
void main()
{rectangle rect1(3,7,8,5); (2分)
cout<<rect1.getarea()<<endl; (1分)
}
2、 定义一boat与car两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。(10分)
2、(10分)
#include <iostream.h>
class car;(1分)
class boat{
private:
int weight; //(1分)
public:
boat(int w):weight(w){} //(1分)
friend int totalweight(boat b1,car c1); //(2分)
};
class car{ /(1分)
private:
int weight; (1分)
public:
car(int w):weight(w){};
friend int totalweight(boat b1,car c1); (1分)
};
int totalweight(boat b1,car c1) //(1分)
{
return b1.weight+c1.weight;
}
void main()
{ car c1(1000);
boat b1(2000);
cout<<totalweight(b1,c1)<<endl;(1分)
}
3、 设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight。小车类car是它的派生类,其中包含载人数passenger_load。每个类都有相关数据的输出方法。在主程序中定义一个car类对象,对其车轮个数、车重、载人数进行设置并显示。(10分)
3、(10分)
#include<iostream.h>
class vehicle // 定义汽车类 (3分)
{
protected:
int wheels; // 车轮数
float weight; // 重量
public:
vehicle(int wheels,float weight);
int get_wheels();
float get_weight();
float wheel_load();
void show();
};
class car:public vehicle // 定义小车类 (3分)
{
int passenger_load; // 载人数
public:
car(int wheels,float weight,int passengers=4);
int get_passengers();
void show();
};
vehicle::vehicle(int wheels1,float weight1) //(1分)
{ wheels=wheels1;
weight=weight1; }
int vehicle::get_wheels()
{ return wheels; }
float vehicle::get_weight()
{ return weight; }
void vehicle::show() (1分)
{ cout << "车轮:" << wheels << "个" << endl;
cout << "重量:" << weight << "公斤" << endl; }
car::car(int wheels, float weight,
int passengers) :vehicle(wheels, weight)
{ passenger_load=passengers; }
int car::get_passengers ()
{ return passenger_load; }
void car::show()
{ cout <<" 车型:小车" << endl;
vehicle::show();
cout << "载人:" << passenger_load << "人" << endl;
cout << endl; }
void main ()
{ car car1(4,2000,5); (1分)
cout << "输出结果" << endl;
car1. show (); (1分)
}
一、 填空题(每空1分,共14分)
1、 观看以下程序:
class point{
public:
void show() {cout<<”point”<<endl;}
};
void main()
{
point p1;
point *p;
p=&p1;
___p1.show()____//通过对象p1访问show函数
____p->show()__//通过指针p访问show函数
}
2、 在C++类中可以包含__公有__、私有__和___保护___三种具有不同访问控制权的成员。
3、 定义类时,在类头中将使用关键字___class______来表示类定义的开始。
4、 如果一个类中至少有一个纯虚函数,则该类称为_____抽象类_____。
5、 C++类的组成包括数据成员和___成员函数__,友元_不是__(是、不是)该类的成员函数。
6、 友员函数是用关键字__friend___修饰的非成员函数。
7、 若有:
int i;
int &j=i;
i=10;
j=i+1;
则i=_11__,j=_11__。
8、 new的功能是___动态申请内存空间___,delete的功能是___释放由new申请的空间____。
二、 选择题(每小题1.5分,共30分)
1、下列特性中不是面向对象程序设计语言所特有的是( D )。
(A)数据封装 (B)继承(C)多态性 (D)模板
2、( B )是给变量取一个别名,它引入了变量的同意词。
(A)指针 (B)引用 (C)枚举 (D)结构
3、类成员的访问权限中,( C )只能被本类的成员函数和其友元函数访问。
(A)share (B)public (C)private (D)protected
4、关于构造函数,下列说法不正确的是( D )。
(A)构造函数名字和类名相同
(B)构造函数在创建对象时自动执行
(C)构造函数无任何函数返回类型
(D)构造函数有且只有一个
5、派生类可以访问其基类的( D )。
(A)公有成员 |
(B)保护成员 |
(C)私有派生 |
(D)公有和保护成员 |
6、下列关于运算符重载的描述中,错误的是( B )。
(A)运算符重载不可以改变操作数的个数 |
(B)运算符重载不可以改变运算符的功能 |
(C)运算符重载不可以改变结合方向 |
(D)运算符重载不可以改变运算优先级 |
7、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是( B )
(A)面向过程 (B)面向对象 (C)安全性 (D)复用性
8、对于类中定义的成员,其隐含访问权限为( C )。
A.public B.protected
C.private D.static
9、下面有关重载函数的说法中正确的是( C )
(A)重载函数必须具有不同的返回值类型; (B)重载函数形参个数必须不同;
(C)重载函数必须有不同的形参列表 (D)重载函数名可以不同;
10、有如下的对类“CSample”的说明,其中( A )是错误的。
class CSample {
A.int a=23;
B.CSample();
public:
C.CSample(int val);
D.~ CSample();
11、在int a=3,int *p=&a;中,*p的值是( D )
A.变量a的地址值 B.无意义
C.变量p的地址值 D.3
12、每个类( C)构造函数。
(A)只能有一个 (B)只可有公有的
(C)可以有多个 (D)只可有缺省的
13、在一个类中可以对一个操作符进行( D )重载。
(A)1 种 (B)2 种以下 (C)3 种以下 (D)多种
14、在公有继承的情况下,基类非私有成员在派生类中的访问权限(B )
(A) 受限制 (B)保持不变 (C)受保护 (D)不受保护
15、应在下列程序划线处填入的正确语句是(C )
#include <iostream.h>
class Base
{public:
void fun(){cout<<"Base::fun"<<ENDL;}
};
class Derived:public Base
{ void fun()
{_____________//显示调用基类的函数fun()
cout<<"Derived::fun"<<ENDL;
}
};
(A)fun(); (B)Base.fun(); (C)Base::fun(); (D)Base->fun();
16、执行下面的程序将输出( A )
#include <iostream.h>
class BASE{
char c;
public:
BASE(char n):c(n){}
virtual ~BASE(){cout<<c;}
};
class DERIVED:public BASE{
char c;
public:
DERIVED(char n):BASE(n+1),c(n){}
~DERIVED(){cout<<c;}
};
int main()
{DERIVED a(‘X‘);
return 0;
}
(A)XY (B)YX (C)X (D)Y
17、 下面描述中,表达错误的是( B )
(A)公有继承时基类中的public成员在派生类中仍是public的
(B)公有继承是基类中的private成员在派生类中仍是private的
(C)公有继承时基类中的protected成员在派生类中仍是protected的
(D)私有继承时基类中的public成员在派生类中是private的
18、定义析构函数时,应该注意( C )
(A)其名与类名完全相同 (B)返回类型是 void 类型
(C)无形参,也不可重载 (D)函数体中必须有 delete 语句
19、对于在类中定义的静态数据成员,下面正确的说法是( C )
A.该类的每个对象中都有一个静态数据成员
B.对象创建时产生
C.在类外进行初始化
D.既可以在类外初始化,也可以在类内初始化
20、C++中声明常量的关键字是( A )。
A. const B. extern C. public D. enum
三、 改错题(每处2分,共6分)
1、 使用VC6打开考生文件夹下的工程proj1,此工程包含一个源程序文件main.cpp,但该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:
member=0
member=5
menber=10
源程序文件main.cpp清单如下:
#include <iostream.h>
class MyClass
{
public:
MyClass(int i){member=i;}
void SetMember(int m){member=m;}
int GetMember()const{return menber;}
void print()cont{cout<<"member="<<MEMBER<<ENDL;}
private:
int member;
};
void main()
{
MyClass obj1;
obj1.print();
MyClass obj2(3);
obj1.member=5;
MyClass.SetMember(10);
obj1.print();
obj2.print();
}
答案:MyClass obj1(0); obj1.SetMember(5); obj2.SetMember(10);
四、 写出下列程序的执行结果(每小题5分,共20分)
1、
#include<iostream.h>
class Sample
{ int n;
public:
Sample(int i){n=i;}
friend int add(Sample &s1,Sample &s2);
};
int add(Sample &s1,Sample &s2)
{
return s1.n+s2.n;
}
void main()
{
Sample s1(10),s2(20);
cout<<add(s1,s2)<<endl;
}
执行结果是:30
2、
#include<iostream.h>
int add(int x,int y)
{
return x+y+1;
}
double add(double x,double y)
{
return x+y-1;
}
void main()
{
int a=2,b=4;
double c=2.6,d=7.4;
cout<<add(a,b)<<","<<add(c,d)<<endl;
}
执行结果是:7 9
3、
#include<iostream.h>
class A
{
public:
int n;
};
class B:virtual public A{};
class C:virtual public A{};
class D:public B,public C
{
int getn(){return B::n;}
};
void main()
{
D d;
d.B::n=10;
d.C::n=20;
cout<<d.B::n<<","<<d.C::n<<endl;
}
执行结果是:20 20
4、
#include <iostream.h>
class myclass
{
int a,b;
static int s;
public:
myclass(int x,int y)
{a=x;b=y;s++;}
void print()
{cout<<s<<endl;}
};
int myclass::s=0;
void main()
{
myclass m1(1,2),m2(4,5),m3(6,7);
m1.print();
m2.print();
m3.print();
}
执行结果是:3
3
3
五、 编程题(每题10分、共30分)
1、 测试一个名为rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。(10分)
1、
#include <iostream.h>
#include <math.h>
class rectangle //(2分)
{
private:
int x1,y1,x2,y2; // (2分)
public:
rectangle(int xx1,int yy1,int xx2,int yy2) //(1分)
{x1=xx1;y1=yy1;x2=xx2;y2=yy2;}
int getarea() //(2分)
{return abs((x2-x1)*(y1-y2));}
};
void main()
{rectangle rect1(3,7,8,5); (2分)
cout<<rect1.getarea()<<endl; (1分)
}
2、 定义一boat与car两个类,二者都有weight属性,定义二者的一个友元函数totalweight(),计算二者的重量和。(10分)
2、(10分)
#include <iostream.h>
class car;(1分)
class boat{
private:
int weight; //(1分)
public:
boat(int w):weight(w){} //(1分)
friend int totalweight(boat b1,car c1); //(2分)
};
class car{ /(1分)
private:
int weight; (1分)
public:
car(int w):weight(w){};
friend int totalweight(boat b1,car c1); (1分)
};
int totalweight(boat b1,car c1) //(1分)
{
return b1.weight+c1.weight;
}
void main()
{ car c1(1000);
boat b1(2000);
cout<<totalweight(b1,c1)<<endl;(1分)
}
3、 设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight。小车类car是它的派生类,其中包含载人数passenger_load。每个类都有相关数据的输出方法。在主程序中定义一个car类对象,对其车轮个数、车重、载人数进行设置并显示。(10分)
3、(10分)
#include<iostream.h>
class vehicle // 定义汽车类 (3分)
{
protected:
int wheels; // 车轮数
float weight; // 重量
public:
vehicle(int wheels,float weight);
int get_wheels();
float get_weight();
float wheel_load();
void show();
};
class car:public vehicle // 定义小车类 (3分)
{
int passenger_load; // 载人数
public:
car(int wheels,float weight,int passengers=4);
int get_passengers();
void show();
};
vehicle::vehicle(int wheels1,float weight1) //(1分)
{ wheels=wheels1;
weight=weight1; }
int vehicle::get_wheels()
{ return wheels; }
float vehicle::get_weight()
{ return weight; }
void vehicle::show() (1分)
{ cout << "车轮:" << wheels << "个" << endl;
cout << "重量:" << weight << "公斤" << endl; }
car::car(int wheels, float weight,
int passengers) :vehicle(wheels, weight)
{ passenger_load=passengers; }
int car::get_passengers ()
{ return passenger_load; }
void car::show()
{ cout <<" 车型:小车" << endl;
vehicle::show();
cout << "载人:" << passenger_load << "人" << endl;
cout << endl; }
void main ()
{ car car1(4,2000,5); (1分)
cout << "输出结果" << endl;
car1. show (); (1分)
}