C++试卷2
- 格式:pdf
- 大小:181.76 KB
- 文档页数:4
三、判断题(每小题 1 分,共 15 分)
1. 友元函数说明在类体内,它是一种成员函数。 2. 构造函数的名字必须与类名相同,其返回类型缺省为 void 类型。 3. 运算符重载以后,其优先级和结合性都不能改变。 4. 在类 Time 中的析构函数可以声明为:void ~Time(int) 。 5. 纯虚函数是在基类中说明的虚函数,它在该基类中没有定义具体的操作内容。 6. 在 C++中,函数名实际上是一个指针,它指向函数的入口。 7. 常对象只能调用它的常成员函数, 而不能调用普通的成员函数。 8. 类静态成员数据为该类所有对象共享,在该类对象被撤销时,静态成员并不撤销。 9. 在声明一个类时,必须同时声明类的数据成员和成员函数。 10. 析构函数的作用是当对象不用时,删除对象。 11. 已知:int a=5,b=10; 表达式++a+b++有二义性。 12. 在传值调用中,要求实参和形参的类型完全一致并且个数相等。 13. const char *p 说明了 p 是指向字符串的常量指针。 14. 可以用 delete 释放不是用 new 运算符分配的内存。 15. For 循环是只有可以确定的循环次数时才可使用,否则不能用 for 循环。
四、下列小程序各 1 个错误,指出错误行数,并进行改正(每小题 4 分,共 8 分)
1、类模板的对象定义 ① template <class T> ② class Tany ③{ ④ T x,y; ⑤ public: ⑥ Tany(T a,T b){ x=a, y=b;} ⑦ T sum( ){return x+y;} ⑧ }; ⑨ Tany (int) obj(10,100);
2、函数模板,用于计算两个向量的和。 # include <iostream.h> template<class T> T* f(T* a, T* b,int n) {
T* c=_ (3)___ ;
{ temp1=head; (6) ; temp2=p; p=p->next; (7) ; //
for(int i=0;i<n;i++)
13、已知:int m=10; 下列表示引用的方法中,( )是正确的。
A.int &x=m; B.int &y=10;
C.int &z;
D.float &t=&m;
14、不能说明为虚函数的是( )。
A.析构函数 B.构造函数
C.类的成员函数 D.以上都不对
15、存储以下数据,占用存储字节最多的是( ) 。
2、包括静态数据的类定义
① class myClass
② { public:
3
myClass ( ){ a=1; }
4
void set(int p) {a = p;}
5 private:
6
int a;
⑦
static int sum = 0;
⑧ };
⑨
第2页共4页
五、程序填空题:下列程序中缺少若干条语句,每条下划线只填一条语句(每条
{cout<<"Win Begin"<<endl;}
A(A &objA) { cout << "Copy virtual void OutWin( )
A()"<<endl;}
{ cout<<"Win"<<endl; }
};
void n()
class B
{ cout<<"OpenWin"<<endl;}
A. 0
B. ‘0’
C. “0”
D. 0.0
第1页共4页
二、填空题(每空 1 分,共 15 分)
1. 面向对象程序设计有 4 个主要特点: (1) 、 (2) 、(3) 、 (4) 。 2. 如果只想保留公共基类的一个复制,就必须使用关键字 (5) 把这个公共基类声
明为虚基类。 3. 后置自增运算符“++”重载为类的成员函数(设类名为 A)的形式为: (6) 。 4. 若要把 void fun(A &a)定义为类 A 的友元函数,则应在类定义中加入语句 (7) 。 5. 在 C++中,三种继承方式的说明符号为 (8) 、 (9) 、 (10) ,如果不加说明,
}
c〔i〕= (4) ;
return head; //返回逆置后的头结点
return c;
}
}
void main()
{ int a[5]={1,2,3,4,5}, b[5]={1,5,2,5};
int * p=f(a,b,5);
}
六、简答题(每题 4 分,共 12 分)
1、简述结构化的程序设计、面向对象的程序设计的基本思想。 2、什么是 this 指针,其作用是什么? 3、若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能 会产生什么问题?
{
};
public:
class Button: public Window
A objA;
{public:
B()
virtual void OutWin()
{ cout << "B()"<<endl;}
{ cout<<"But"<<endl; }
B(B &objB)
void Open()
{ cout << "Copy B()"<<endl;}
语句 2 分,共 14 分)
1、下面是类 fraction 定义,其中重载的 3、链表结点的结构如下,完成使链表逆置
运算符<<以分数形式输出结果,例如将三
分之二输出为 2/3。 class fraction{
int den; //分子 int num; //分母 friend ostream& operator<<
要求: 编写类 Complex 及成员函数,并编写一个主程序,主程序中定义了 2 个复数(其 中有一个复数的参数为默认参数,另一个参数可以是任意有效值),然后,计算 2 个复数的 加,并输出结果。
第4页共4页
D. 嵌套调用
7、已知:print( )函数是一个类的常成员函数,它无返回值,下列表示中,( )是正确的。
A. void print( ) const;
B. const void print( );
C. void const print( );
D. void print(const);
8、下面对模板的声明,正确的是( )。
{ cout<<"OpenBut"<<endl;}
B(A &objA)
};
{ cout << "B(A) called"<<endl;} void main()
};
{ Window w1, *pt1;
void main ()
Button b1;
{
pt1 = &w1;
A objA1;
pt1->OutWin();
函数 reverse,head 为链表头结点 struct node { int num; struct node *next; }
(ostream&, fraction&); }; ostream& operator <<(ostream& os,
fraction &fr) {
os<<fr.den<< (1) <<endl; return (2) ;
第3页共4页
七、阅读下列程序,写出运行结果(第小题 6 分,共 12 分)
1、
2、
#include <iostream.h >
#include <iostream.h>
class A
class Window
{
{ public:
public:
Window()
A( ) { cout << "A()"<<endl;}
中南大学考试试卷
2012-- 2013 学年 2 学期期末考试试题 A 卷
时间 100 分钟
面向对象编程(C++)课程 48 学时 3 学分 考试形式:闭卷
专业年级: 2012 级 总分 100 分,占总评成绩 70 %
注:此页不作答题纸,请将答案写在答题纸上
一、选择题(单选)(每空 1 分,共 15 分)
D.3
10、假定TT为一个类,则该类的拷贝构造函数的声明语句为( )。
A.TT (TT x)
B.TT& (TT x)
C.TT (TT &x) D.TT (TT *x)
11、下列语句中,将函数int sum(int x, int y)正确重载的是( )。
A. float sum(int x, int y);
A. template<T>
B. template<class T1, T2>
C. template<class T1, class T2>