return 0;
}
运行时的输出结果是【12】。
(13)补充完整下面的类定义:
const double PI=3 .14;
class Circle{ //圆形物体的抽象基类
protected:
double r; //半径
public:
Circle(double radius=0):r(radius){} 【13】;//计算圆形物体表面积的纯虚函
数声明
};
class Cylinder:public Circle { //圆柱体类
double h; //高度
public:
Cylindr(double radius=0, doubli height=0):
Circle(radius),h (height){}
Virtual double Area(){ //计算圆柱体的表面积
return 2*PI*r*(r+h);
}
};
(14)补充完整下面的类定义:
class XCH{
char* a;
public:
XCH(char* as){ //构造函数
a=new char[strlen(aa)+1];
strcpy(a,aa);
}
XCH& operator=(const XCH& x)//重载赋值函数
Delele []a;
A=new char[strlen(x.a)+l];
strcpy(a, x .a)
【14】;
}
~XCH(){delete []a;}
};
(15)补充完整下面的模板定义:
template //Type为类型参数
class Xtwo{ //由两个Type类型的数据成员构成的模板类
Type a;
Type b;
public:
Xtwe(Type aa=0, Type bb=0):a(aa),b(bb){}
int Ccmpare (){//比较a和b的大小
if (a>b)returm 1;
else if(a==b)return 0;
else return -1;
}
Type Snm(){return a+b;} //返回a和b之和
Type Mult();//函数声明,返回a和b之乘积
};
Template
【15】::Mult(){return a*b;} //Mult 函数的类外定义
参考答案
一、选择题:
(11)D (12)B (13)A (14)
B (15)B(16)A (17)B (18)
C (19) A (20)D(21)
D (22)B (23)A (24)B (25)C(26)B (27)A (28)B (29)C (30)B(31)D (32)D (33)C (34)
C (35)B
二、填空题
(6)213 (7)15,30,45 (8)examination (9)10 (10)友元(11)id(i),mom (c)(12)Dog speak Woof (13)Virtual double Area(){ return PI *r*r} (14)return *a (15)Xwo
2009年9月二级C++笔试试卷
(11)已知函数FA调用FB,若要把这两个函数定义在同一个文件中,则()。A)FA必须定义在FB之前
B)FB必须定义在FA之前
C)若FA定义在FB之后,则FA的原型必须出现在FB的定义之前
D)若FB定义在FA之后,则FB的原型必须出现在FA的定义之前
(12)有如下两个类定义:
class AA{};
class BB {
AA v1,*v2;
BB v3;
int *v4;
};
其中有一个成员变量的定义是错误的,这个变量是()。
A)v1 B)v2 C)v3 D)v4
(13)有如下类定义:
class XX {
int xdata;
public:
XX(int n=0) : xdata(n){}
};
class YY : public XX {
int ydata;
public:
YY(int m=0, int n=0) : XX(m), ydata(n){}
};
YY类的对象包含的数据成员的个数是()。
A)1 B)2 C)3 D)4
(14)下列关于运算符函数的描述中,错误的是()。
A)运算符函数的名称总是以operator为前缀
B)运算符函数的参数可以是对象
C)运算符函数只能定义为类的成员函数
D)在表达式中使用重载的运算符相当于调用运算符重载函数
(15)下列关于模板形参的描述中,错误的是()。
A)模板形参表必须在关键字template之后
B)模板形参表必须用括弧()括起来
C)可以用class修饰模板形参
D)可以用typename修饰模板形参
(16)在下列枚举符号中,用来表示“相对于当前位置”文件定位方式的是()。A)ios_base::cur B)ios_base::beg
C)ios_base::out D)ios_base::end
(17)下列字符串中可以用作C++标识符的是()。
A)2009var B)goto
C)test-2009 D)_123
(18)下列枚举类型的定义中,包含枚举值3的是()。
A)enum test {RED, YELLOW, BLUE, BLACK};
B)enum test {RED, YELLOW=4, BLUE, BLACK};
C)enum test {RED=-1,YELLOW, BLUE, BLACK};
D)enum test {RED, YELLOW=6, BLUE, BLACK};
(19)有如下程序段:
int i=1;
while(1) {
i++;
if(i==10) break;
if(i%2==0) cout<<'*';
}
}
执行这个程序段输出字符*的个数是()。
A)10 B)3 C)4 D)5
(20)已知数组arr的定义如下:
int arr[5]={1,2,3,4,5};
下列语句中输出结果不是2的是()。
A)cout << *arr+1 << endl; B)cout << * (arr+1) << endl;
C)cout << arr[1] << endl; D)cout << *art << endl;
(21)计算斐波那契数列第n项的函数定义如下:
int fib(int n){
if(n==0) return 1;
else if(n==1) return 2;
else return fib(n-1)+fib(n-2);
}
若执行函数调用表达式fib(2),函数fib被调用的次数是()。
A)1 B)2 C)3 D)4
22)Sample是一个类,执行下面语句后,调用Sample类的构造函数的次数是()。Sample a[2], *P = new Sample;
A)0 B)1 C)2 D)3
(23)下列关于虚基类的描述中,错误的是()。
A)使用虚基类可以消除由多继承产生的二义性
B)构造派生类对象时,虚基类的构造函数只被调用一次
C)声明“class B : virtual public A”说明类B为虚基类
D)建立派生类对象时,首先调用虚基类的构造函数
(24)将运算符重载为类成员函数时,其参数表中没有参数,说明该运算符是()。A)不合法的运算符B)一元运算符
C)无操作数的运算符D)二元运算符
(25)有如下模板声明:
template < typename T1, typename T2> class A;
下列声明中,与上述声明不等价的是()。
A)template class A;
B)template class A;
C)template class A;
D)template class A;
(26)下列关于C++流的描述中,错误的是()。
A)cout>>'A'表达式可输出字符A
B)eof()函数可以检测是否到达文件尾
C)对磁盘文件进行流操作时,必须包含头文件fstream
D)以ios_base::out模式打开的文件不存在时,将自动建立一个新文件(27)有如下程序:
# include
using namespace std;
class Toy {
public:
Toy(char* _n){ strcpy(name, _n); count++;}
~Toy() { count--;}
char* GetName(){ return name; }
static int getCount(){ return count; }
private:
char name[10];
static int count;
};
int Toy::count=0;
int main(){
Toy t1("Snoopy"), t2("Mickey"), t3("Barbie");
cout<return 0;
}
运行时的输出结果是()。
A)1 B)2 C)3 D)运行时出错
(28)有如下程序:
# include
using namespace std;
class A {
public:
A(int i) : r1(i) {}
void print() {cout<<'E'<void print() const {cout<<'C'<pivate:
int r1;
};
int main(){ 日
A a1(2); const A a2(4);
a1.print(); a2.print();
return 0;
}
运行时的输出结果是()。
A)运行时出错B)E2-C16- C)C4-C16- D)E2-E4-
(29)有如下程序:
# include
using namespace std;
class Name{
char name[20];
public:
Name(){
strcpy(name, ""); cout<<'?';
}
Name(char *fname){
strcpy(name,fname); cout<<'?';
}
};
int main(){
Name names[3]={Name("张三"), Name("李四")}; return 0;
}
运行此程序输出符号?的个数是()。
A)0 B)1 C)2 D)3
(30)有如下程序:
# include
using namespace std;
class AA{
public:
AA(){ cout<<'1'; }
};
class BB: public AA{
int k;
public:
BB() : k(0) { cout<<'2'; }
BB(int n) : k(n) { cout<<'3'; }
};
int main(){
BB b(4), c;
return 0;
}
运行时的输出结果是()。
A)1312 B)132 C)32 D)1412
(31)有如下程序:
# include
using namespace std;
class C1{
public:
~C1(){ cout<<1; }
};
class C2: public C1{
public:
~C2(){ cout<<2; }
};
int main(){
C2 cb2;
C1 *cb1;
return 0;
}
运行时的输出结果是()。
A)121 B)21 C)211 D)12
(32)有如下程序:
# include
using namespace std;
class Publication{ //出版物类
char name[30];
public:
Publication(char *name="未知名称"){
strcpy(this->name,name);
}
const char * getName()const{ return name; }
virtual const char * getType()const{ return "未知类型";} };
class Book: public Publication{ //书类
public:
Book(char *name): Publication(name){}
virtual const char * getType()const{ return "书";}
};
void showPublication( Publication &p){
cout<
}
int main(){
Book book("精彩人生");
showPublication(book);
return 0;
}
运行时的输出结果是()。
A)未知类型:未知名称B)未知类型:精彩人生
C)书:未知名称D)书:精彩人生
(33)下列关于运算符重载的描述中,错误的是()。A)::运算符不能重载
B)类型转换运算符只能作为成员函数重载
C)将运算符作为非成员函数重载时必须定义为友元D)重载[ ]运算符应完成“下标访问”操作
(34)有如下程序:
# include
# include
using namespace std;
int main(){
int s[]={123, 234};
cout<for(int i=0; i<2; i++){ cout<
return 0;
}
运行时的输出结果是()。
A)123 B)***123 C)***123 D)***123
234 234 ***234 234***
(35)有如下类定义:
ciass A {
char *a;
public:
A() : a(0){}
A(char *aa){ //把aa所指字符串拷贝到a所指向的存储空间
a=__________;
strcpy(a,aa);
}
~A() (delete []a;}
};
横线处应填写的表达式是()。
A)new char[strlen(aa)+1] B)char[strlen(aa)+1]
C)char[strlen(aa)] D)new char[sizeof(aa)-1]
二、填空题(每空2分,共30分)
(6)若表达式(x+(y-z)*(m/n))+3中的变量均为double型,则表达式值的类型为【6】。(7)有如下循环语句:
for(int i=50; i>20; i-=2) cout<
运行时循环体的执行次数是【7】次。
(8)利用表达式a[i]可以访问int型数组a中下标为i的元素。在执行了语句int *p=a;后,利用指针p也可
访问该元素,相应的表达式是【8】。
(9)下面是一个递归函数,其功能是使数组中的元素反序排列。请将函数补充完整。void reverse(int *a, int size){
if(size<2) return;
int k=a[0];
a[0]=a[size-1];
a[size-1]=k;
reverse(a+l, 【9】);
}
(10)类Sample的构造函数将形参data赋值给数据成员data。请将类定义补充完整。class Sample{
public:
Sample(int data=0);
private:
int data;
};
Sample::Sample(int data){
【10】
}
(11)有如下类定义:
class Sample{
public:
Sample();
~Sample();
private:
static int data;
};
将静态数据成员data初始化为0的语句是【11】。
(12)“图形”类Shape中定义了纯虚函数CalArea(),“三角形”类Triangle继承了类Shape,请将Triangle
类中的CalArea函数补充完整。
class Shape{
public:
virtual int CalArea()=0;
};
class Triangle: public Shape{
public:
Triangle(int s, int h) : side(s), height(h){}
【12】。{ return side * height/2;}
private:
int side;
int height;
};
(13)有如下程序:
# include
using namespace std;
class GrandChild{
public:
GrandChild(){ strcpy(name,"Unknown"); }
const char * getName() const { return name;}
virtual char * getAddress() const=0;
private:
char name[20];
};
class GrandSon : public GrandChild{
public:
GrandSon(char *name){}
char * getAddress() const { return "Shanghai"; }
};
int main(){
GrandChild *gs=new GrandSon ("Feifei");
cout<getName()<<"住在"<getAddress()<delete gs;
return 0;
}
运行时的输出结果是【13】。
(14)如下程序定义了“单词”类Word,类中重载了<运算符,用于比较“单词”的大小,返回相应的逻
辑值。程序的输出结果为:After Sorting:Happy Welcome,请将程序补充完整。
# include
# include
using namespace std;
class Word{
public:
Word(string s) : str(s){}
string getStr(){ return str; }
bool operator < (Word w) const {return(strfriend ostream& operator<<(ostream& output, const Word &w)
{ output<private:
string str;
};
int main(){
Word w1("Happy"),w2("Welcome");
cout<<"After sorting: ";
if(w1else cout<return 0;
}
(15)请将下列模板类Data补充完整。
template
class Data{
public:
void put(T v) { val=v; }
【15】get() //返回数据成员val的值,返回类型不加转换
{ return val; }
private:
T val;
};
2009年9月二级C++笔试试卷参考答案
一、选择题
(1)C)(2)B)(3)D)(4)A)(5)B)(6)A)(7)C)(8)B)(9)C)(10)D)
(11)D)(12)C)(13)B)(14)C)(15)B(16)A)(17)D)(18)A)(19)C)(20)D)
(21)B)(22)D)(23)C)(24)B)(25)D(26)A)(27)C)(28)B)(29)D)(30)A)
(31)B)(32)D)(33)C)(34)B)(35)A)
二、填空题
(6)double型(7)15 (8)*(p+i)(9)size-2 (10)this->data=data(11)int Sample ::data=0(12)int CalArea(size,height)(13)Unknown住在Shanghai (14)bool operator < (Word w) (15)T
学习使人进步,相信能就一定能成功
人与人之间的距离虽然摸不着,看不见,但的的确确是一杆实实在在的秤。真与假,善与恶,美与丑,尽在秤杆上可以看出;人心的大小,胸怀的宽窄,拨一拨秤砣全然知晓。
人与人之间的距离,不可太近。
与人太近了,常常看人不清。一个人既有优点,也有缺点,所谓人无完人,金无赤足是也。初识时,走得太近就会模糊了不足,宠之;时间久了,原本的美丽之处也成了瑕疵,嫌之。
与人太近了,便随手可得,有时得物,据为己有,太过贪财;有时得人,为己所用,也许贪色。贪财也好,贪色亦罢,都是一种贪心。
与人太近了,最可悲的就是会把自己丢在别人身上,找不到自己的影子,忘了回家的路。
这世上,根本没有零距离的人际关系,因为人总是有一份自私的,人与人之间太近的距离,易滋生事端,恩怨相随。所以,人与人相处的太近了,便渐渐相远。
人与人之间的距离也不可太远。
太远了,就像放飞的风筝,过高断线。
太远了,就像南徙的大雁,失群哀鸣。
太远了,就像失联的旅人,形单影只。
人与人之间的距离,有时,先远后近;有时,先近后远。这每次的变化之中,总是有一个难以忘记的故事或者一段难以割舍的情。
有时候,人与人之间的距离,忽然间近了,其实还是远;忽然间远了,肯定是伤了谁。
人与人之间的距离,如果是一份信笺,那是思念;如果是一个微笑,那是宽容;如果是一句问候,那是友谊;如果是一次付出,那是责任。这样的距离,即便是远,但也很近。
最怕的,人与人之间的距离就是一句失真的谗言,一个不屑的眼神,一叠诱人的纸币,或者是一条无法逾越的深谷。这样的距离,即便是近,但也很远。
人与人之间最美的距离,就是不远不近,远中有近,近中有远,远而不离开,近而不相丢。
太远的距离,只需要一份宽容,就不会走得太远而行同陌人;太近的距离,只需要一份自尊,就不会走得太近而丢了自己。不远不近的距离,多像一朵艳丽的花,一首悦耳的歌,一首优美的诗。
人生路上,每个人的相遇、相识,都是一份缘,我们都是相互之间不可或缺的伴。
人与人之间的距离虽然摸不着,看不见,但的的确确是一杆实实在在的秤。真与假,善与恶,美与丑,尽在秤杆上可以看出;人心的大小,胸怀的宽窄,拨一拨秤砣全然知晓。
人与人之间的距离,不可太近。
与人太近了,常常看人不清。一个人既有优点,也有缺点,所谓人无完人,金无赤足是也。初识时,走得太近就会模糊了不足,宠之;时间久了,原本的美丽之处也成了瑕疵,嫌之。
与人太近了,便随手可得,有时得物,据为己有,太过贪财;有时得人,为己所用,也许贪色。贪财也好,贪色亦罢,都是一种贪心。
与人太近了,最可悲的就是会把自己丢在别人身上,找不到自己的影子,忘了回家的路。
这世上,根本没有零距离的人际关系,因为人总是有一份自私的,人与人之间太近的距离,易滋生事端,恩怨相随。所以,人与人相处的太近了,便渐渐相远。
人与人之间的距离也不可太远。
太远了,就像放飞的风筝,过高断线。
太远了,就像南徙的大雁,失群哀鸣。
太远了,就像失联的旅人,形单影只。
人与人之间的距离,有时,先远后近;有时,先近后远。这每次的变化之中,总是有一个难以忘记的故事或者一段难以割舍的情。
有时候,人与人之间的距离,忽然间近了,其实还是远;忽然间远了,肯定是伤了谁。
人与人之间的距离,如果是一份信笺,那是思念;如果是一个微笑,那是宽容;如果是一句问候,那是友谊;如果是一次付出,那是责任。这样的距离,即便是远,但也很近。
最怕的,人与人之间的距离就是一句失真的谗言,一个不屑的眼神,一叠诱人的纸币,或者是一条无法逾越的深谷。这样的距离,即便是近,但也很远。
人与人之间最美的距离,就是不远不近,远中有近,近中有远,远而不离开,近而不相丢。
太远的距离,只需要一份宽容,就不会走得太远而行同陌人;太近的距离,只需要一份自尊,就不会走得太近而丢了自己。不远不近的距离,多像一朵艳丽的花,一首悦耳的歌,一首优美的诗。
人生路上,每个人的相遇、相识,都是一份缘,我们都是相互之间不可或缺的伴。