int month; int day; };
strnct Employee { char name[20] ; long code ; Date birth };
Employee emp ;
下列对emp的birth的正确赋值方法是( d )。 (a) year=1980; month=5; day=1;
(b) birth.year=1980; birth.month=5; birth.day=1; (c) emp.year=1980; emp.month=5; emp.day=1;
(d) emp.birth.year=1980; emp.birth.month=5; emp.birth.day=1; 97.关于this指针的说法正确的是( c )。 (a) this指针必须显式说明
(b) 定义一个类后,this指针就指向该类 (c) 成员函数拥有this指针 (d) 静态成员函数拥有this指针
98.下面对构造函数的不正确描述是( b )。 (a) 系统提供默认的构造函数
(b) 构造函数可以有参数,所以也可以有返回值 (c) 构造函数可以重载
(d) 构造函数可以设置默认参数
99.下列关于运算符重载的描述中,( d )是正确的。 (a) 可以改变参与运算的操作数个数 (b) 可以改变运算符原来的优先级 (c) 可以改变运算符原来的结合性 (d) 不能改变原运算符的优先级和结合性
100.下面函数原型中,( b )声明了fun为纯虚函数。 (a) void fun()=0; (b) virtual void fun()=0; (c) virtual void fun(); (d) virtual void fun(){ }; 101.下列正确的八进制整型常量表示是( b )。 (a) 0a0
(b) 015
(c) 080
(d) 0x10
102.执行下面语句序列后,a和b的值分别为( b )。
int a = 5 , b = 3 , t ; int &ra = a ; int &rb = b ;
t = ra ; ra = rb ; rb = t ; (a) 3和3
(b) 3和5
(c) 5和3
(d) 5和5
103. 以下逗号表达式的值为( d )。
( x = 4 * 5, x * 5 ), x + 25 //双重逗号表达式! (a) 25 (a) !
(b) 20 (b) ::
(c) 100 (c) new
(d) 45 (d) <<
104.在下列运算符中,不能重载的是( b )。 105.若有以下说明,对n的正确访问语句是( b )。 class Y { //…… ; public:
static int n; }; int Y::n; Y obj Y;
(a) n=1; (b) Y::n=1; (c) objY::n=1; (d) Y->n 三、 简答题
1. 若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?
解答要点:当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。
2. 简述成员函数、全局函数和友元函数的差别。 解答要点:以下几点必须说清楚: 成员函数是在类内部定义的,作用域在类的内部,成员函数可以访问类的数据成员(公有、保护和私有数据成员),可以调用该类的其它成员函数(公有、保护和私有成员函数),可以调用全局函数。如果友元函数是另一个类的公有成员函数,则该类的成员函数也只能通过那个类的对象调用,不能调用那个类的保护和私有成员函数。非本类成员函数(其它类成员函数或全局函数)可以通过该类的对象访问该类的公有数据成员和调用该类的的公有成员函数。 不是在类中定义的成员函数都是全局函数。
如果某一个函数(全局函数或类的成员函数)定义为另一个类的友元函数,
需要在那个类中用friend关键字声明,友元函数并不是类的成员,它的定义自然是在那个类的外面。
3. 简述结构化的程序设计、面向对象的程序设计的基本思想。 解答要点:结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的,面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。 4. 结构struct和类class有什么异同? 解答要点:struct和class都可以定义类,但是缺省访问权限说明时,struct的成员是公有的,而class的成员是私有的。在C++中,struct可被class代替。
5.简述变量的生存期和变量作用域有什么区别?
答:变量的生存期是指程序运行后,变量占有内存的时间;变量作用域是指变量声明之后,在程序正文中有效的那部分区域。
6.什么叫形式参数?什么叫实际参数?C++函数参数有什么不同的传递方式?
答:参数是调用函数与被调用函数之间交换数据的通道。函数定义首部的参数称为形式参数,调用函数时使用的参数称为实际参数。C++有三种参数传递机制:值传递(值调用);指针传递(地址调用);引用传递(引用调用)。 7.若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生什么问题?
答:当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员复制给另一个对象,而不能将该对象中指针所指向的内存单元也复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。
四、读程序,写出运行结果。 1. #include
void main( ) {int I;
for(I=1;I<=5;I++) switch(I%2)
{case 0:I++; cout<<“#”;break; case 1:I+=2; cout<<“*”; default: cout<<“\\n”;}}
运行结果: * #
2. #include
void fun( ); int n=5; void main( ) { int n=10;
cout< void fun( ) { cout< 运行结果: 10 5 3. #include int b=5; int fun(int n); void main( ) { int i; for(i=0;i<3;i++) { cout< int fun(int n) { static a=1; int c=10; a=a+100; b=b+100; c=c+100; return a+b+c; } 运行结果: 316 516 716 4. #include int gcd(int m,int n) { if(m%n==0) return n; else return gcd(n,m%n); } void main( ) { int x=40,y=116; cout< } 运行结果: 4 5. #include Point(){x=1;y=1;} Point(int tx,int ty) {x=tx;y=ty;} ~Point(){cout<<\}; void main() { Point obj1; Point obj2(10,20); } 运行结果: Point 10,20 is deleted. Point 1,1 is deleted. 6. #include {cout< {cout< int count::n=0; void main() { count a; a.show(); {count b[4]; b[3].show(); } a.show(); } 运行结果: 1 5 5 4 3 2 1 1 7.#include A(){cout<<\ ~A(){cout<<\ }; class B:public A