青少年编程能力等级测评CPA C++ 四级试卷(1)
一、单项选择题(共15题,每题3分,共45分)
CP4_1_1.在面向对象程序设计中,与数据构成一个相互依存的整体的是( )。
A. 对数据的操作
B. 对数据的封装
C. 对数据的隐藏
D. 对数据的抽象
CP4_1_2.已知定义了类Day,并且在该类之前已经定义了类Week。下列关于类Day的数据成员定义语句,不正确的是( )。
A.Week weekend;
B.Day *today;
C.Day yestoday;
D.int tomorrow;
CP4_1_3.下列有关类与对象的关系叙述中,不正确的是( )。
A.对象是类的实例
B.一个类只能拥有一个对象
C.一个对象只能属于一个类
D.类是抽象的,不占用内存,而对象是具体的,占用内存
CP4_1_4.若Demo为一个类,则执行Demo sa; 语句时,将自动调用该类的( )。
A. 有参构造函数
B. 无参构造函数
C. 拷贝构造函数
D. 赋值重载函数
CP4_1_5.类的复制构造函数的参数是( )。
A. 类对象
B. 类对象的成员
C. 类对象的引用
D. 指向类对象的指针
CP4_1_6.执行下列代码,运行结果是( )。
#include<iostream>
using namespace std;
class aClass{
public:
aClass(int n) { i=n; }
void set(int n){ i=n; }
int get( ){ return i; }
private:
int i;
};
void sqr(aClass ob)
{
ob.set(ob.get()*ob.get());
cout<<ob.get()<<" ";
}
int main()
{
aClass obj(10);
sqr(obj);
cout<<obj.get( )<<endl;
return 0;
}
A.10 10
B.100 100
C.10 100
D.100 10
CP4_1_7.执行下列代码,运行结果是( )。
#include<iostream>
#include<string>
using namespace std;
class MyBag{
public:
MyBag(string br="OK"):brand(br) { cout<<brand<<" "; }
private:
string brand;
};
int main(){
MyBag arrays[2]={MyBag("GO")};
return 0;
}
A.OK OK
B.GO GO
C.GO OK
D.OK GO
CP4_1_8.执行下列代码,运行结果是( )
#include <iostream>
using namespace std;
class Member{
public:
Member(){
std::cout << "N1 " ;
}
~Member(){
cout << "N2 " ;
}
};
class Test{
private:
Member member;
public:
Test(){
cout << "N3 ";
}
~Test(){
cout << "N4 ";
}
};
int main(){
Test* test = new Test();
delete test;
cout<<endl;
return 0;
}
A.N1 N2 N3 N4
B.N3 N4 N1 N2
C.N1 N3 N4 N2
D.N3 N1 N2 N4
CP4_1_9.在C++中,结构体是一种特殊的类,其成员默认的访问权限是( )。
A.public
B.private
C.static
D.protected
CP4_1_10.下列有关对静态数据成员的叙述中,正确的是( )。
A.静态数据成员可以在类体内进行初始化
B.静态数据成员不可以被类的对象调用
C.静态数据成员不受private控制符的作用
D.静态数据成员可以直接用类名调用
CP4_1_11. 执行下列代码,运行结果是( )。
#include<iostream>
using namespace std;
class Cd{
public:
static int cacu();
private:
static int sum;
};
int Cd::sum=20;
int Cd::cacu(){
return(sum=sum*3);
}
int main(){
cout<<Cd::cacu()<<","<<Cd::cacu()<< endl;
return 0;
}
A.60,180
B.180,60
C.60,60
D.180,180
CP4_1_12.执行下列代码,运行结果是( )。
using namespace std;
#include <iostream>
class Sample{
int n;
public:
Sample(int i){n=--i;}
friend int Plus(Sample &s1,Sample &s2);
};
int Plus(Sample &s1,Sample &s2){
return s1.n*s2.n;
}
int main(){
Sample s1(5),s2(6);
cout << Plus(s1,s2)<<endl;
return 0;
}
A. 20
B. 24
C. 25
D.30
CP4_1_13.下列有关友元成员的叙述中,不正确的是( )。
A. 友元成员可以声明在类的public部分,也可以声明在private部分
B. 友元成员包括友元函数、友元成员函数和友元类
C. 通过友元成员可以让外部函数直接访问类的私有数据
D. 类之间的友元关系是可以传递的,即是可逆的
CP4_1_14.下列代码定义了两个类,有关这两个类的叙述中,正确的是( )。
class B{
friend class A;
public: int x;
private:int y;
};
class A{
public: float m;
private:float n;
};
A.B是A的友元类,B可以访问A中的私有成员
B.B是A的友元类,A可以访问B中的私有成员
C.A是B的友元类,B可以访问A中的私有成员
D.A是B的友元类,A可以访问B中的私有成员
CP4_1_15.下列有关vector容器的定义语句,不正确的是( )
A. vector <int> v(10);
B. vector <char> v;
C. vector v;
D. vector <double> v;
二、多项选择题(共5题,每题2分,共10分)
CP4_1_16.下列代码定义了类和对象,能够正确完成函数调用的语句有( )。
class A{
public:
A(int x):data(x){}
int GetData() const{return data;}
void SetData(int n) {data = n;}
private:
int data;
};
const A a(5);
A b(7);
A.a.GetData();
B.a.SetData(8);
C.b.GetData(8);
D.b.SetData();
CP4_1_17.下列代码定义了类MyClass,有关其对象数组的定义语句,正确的有( )。
class MyClass{
int n;
public:
MyClass(int k):n(k){}
};
A.MyClass x1[2];
B.MyClass x2[2]={new MyClass(1),new MyClass(2)};
C.MyClass *x3[2];
D.MyClass x4[2]={MyClass(1),MyClass(2)};
CP4_1_18.下列有关类的静态成员的叙述中,正确的有( )。
A.类的静态成员可以解决同一个类的不同对象之间的数据和函数的共享问题
B.类的静态数据成员和静态成员函数的声明均需以关键字static开始
C.类的静态数据成员必须进行初始化,初始化时必须加关键字static
D.类的静态成员函数只能在类体内定义,不可以在类外定义
CP4_1_19.下列有关友元函数的叙述中,正确的有( )。
A.友元函数可以是不属于任何类的非成员函数
B.友元函数是它声明语句所在类的成员函数
C.友元函数破坏了类的封装性和隐藏性
D.友元函数不能访问类的私有成员
CP4_1_20.下列运算符中,只能作为成员函数重载的运算符有( )。
A. []
B. ()
C. ->
D. &&
三、编程题(共3题,每题15分,共45分)
CP4_1_21.编写程序实现如下功能:
用户输入圆的半径,通过类的定义和计算,求圆的周长和面积。
说明:
(1) 编程过程中对于程序给定的部分不允许修改,考生仅允许在/****code****/提示行区间内作答。
(2)圆周率的值取3.14。
#include <iostream>
using namespace std;
class Circle
{
/*****************code***********/
/*****************code***********/
private:
double m_r;
};
int main(void)
{
Circle c;
double r;
double girth; //周长
double area; //面积
cin >> r; //输入半径
c.set(r);
girth = c.getGirth();
area = c.getArea();
cout << girth << endl;
cout << area << endl;
return 0;
}
样例1:
输入: 1
输出: 6.28
3.14
样例2:
输入: 2.5
输出: 15.7
19.625
CP4_1_22.编写程序实现如下功能:
通过类的静态成员实现计数统计。用户输入预构造三角形的数量n(n≤10)以及n个三角形的边长。输出满足可以构建成为三角形的对象的总数。
说明:编程过程中对于程序给定的部分不允许修改,考生仅允许在/****code****/提示行区间内作答。
#include <iostream>
using namespace std;
class Triangle
{ /******************************code*****************/
/******************************code*****************/
};
int Triangle::T_Count = 0; // 初始化类 Triangle 的静态成员
int main( )
{
int n;
double c1,c2,c3; //三角形的三边长度
Triangle *t[10];
cin >> n; // 输入要构造的三角形数量, 小于等于10
for(int i=0;i<n;i++){
cin>>c1>>c2>>c3;
t[i]=new Triangle(c1,c2,c3);
}
cout << Triangle::getCount() << endl; //创建对象之后输出满足要求的对象总数
return 0;
}
样例1:
输入:3
1 1 1
1 2 3
3.4 4.2 5.6
输出:2
样例2:
输入:1
2.2 5.4 2.3
输出:0
CP4_1_23.编写程序实现如下功能:
定义complex类,通过重载运算符"+",使之能实现复数的加法运算。用户输入两个复数的实部和虚部值,输出两个复数以及两个复数相加后的结果。
说明:
(1)本程序中,复数的实部和虚部值均为整数;
(2)若虚部的值为0,则该复数即为整数,其输出也是整数的形式,例如4+0j,输出为4。
(3)编程过程中对于程序给定的部分不允许修改,考生仅允许在/****code****/提示行区间内作答。
#include<iostream>
using namespace std;
class complex{
private:
int real;
int image;
public:
complex();
complex(int real_,int image_);
void show();
/*************************code***********************/
/*************************code***********************/
};
complex::complex(){
real = 0;
image = 0;
}
complex::complex(int real_,int image_){
real = real_;
image = image_;
}
void complex::show(){
/**********************code*********************/
/**********************code**********************/
}
int main(){
int r1,r2,i1,i2; //分别表示两个复数的实部和虚部的值
complex c; // 创建complex类的对象
cin>>r1>>i1; //输入数1的实部及虚部
cin>>r2>>i2; //输入数1的实部及虚部
complex a(r1,i1); //创建复数a对象
complex b(r2,i2); //创建复数b对象
a.show(); //显示复数a
b.show(); //显示复数b
c = a + b; // +在复数加中的实现
c.show(); // 显示相加后的复数c
return 0;
}
样例1:
输入:1 2
3 4
输出:1+2j
3+4j
4+6j
样例2:
输入:1 -2
1 2
输出:1-2j
1+2j
2