2-1关于this指针的以下说法,正确的是(A)。
A.当创建一个对象后,this指针就指向该对象
B.this指针必须显式说明
C.this指针指向成员函数
D.this指针的值不会随着对象的不同而改变
2-2下列对重载函数的描述中,(A )是错误的。
A.重载函数中不允许使用默认参数
B.重载函数中编译根据参数表进行选择
C.不要使用重载函数来描述毫无相干的函数
D.构造函数重载将会给初始化带来多种方式
2-3在下面类声明中,关于生成对象不正确的是(C )。
class point
{ public:
int x;
int y;
point(int a,int b) {x=a;y=b;}
};
A.point p(10,2);
B.point *p=new point(1,2);
C.point *p=new point[2];
D.point *p[2]={new point(1,2), new point(3,4)};
2-4某类中有一个无参且无返回值的常成员函数 Show,则正确的 Show 函数原型是 C
A.const void Show();
B.void const Show();
C.void Show() const;
D.void Show(const);
2-5为类提供对外接口的是( A)
A.公有成员函数
B.私有成员函数
C.保护成员函数
D.友元函数
2-6已知类A中的一个成员函数说明为void fun(A &a);,则A &a的含义是( C)
A.将a的地址值赋给变量fun
B.指向类A的指针为a
C.a是类A的对象引用,用来做函数fun()的形参
D.变量A与a按位相与运算后作为函数fun()的参数
2-7假如有以下类A:
classA{
public:
int func(int a){return a*a;)
};
以下程序片段中不正确的是(D )
A.A a;a.func(5);
B.A*p=new A; p->func(5);
C.A a; A& r=a;r.func(5);
D.A a,b; if(a!=b) a.func(5);
2-8给定以下类声明,哪个成员函数可能改变成员变量data? (D)
class A {
public:
void f1 (int d);
void f2 (const int &d);
void f3 (int d) const;
private:
int data;
};
A.f1
B.f2
C.f3
D.f1和f2
2-9假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(B)
A.x.a
B.x.a()
C.x->a()
D.(*x).a()
2-10下面关于成员函数和常成员函数的程序,输出结果是(C)
#include<iostream>
using namespace std;
class MyClass {
public:
MyClass(int x): val(x) {}
void Print() const {cout << "const:val=" << val << '\t';}
void Print() {cout << "val=" << val << '\t';}
private:
int val;
};
int main() {
const MyClass obj1(10);
MyClass obj2(20);
obj1.Print();
obj2.Print();
return 0;
}
A.val=10 const:val=20
B.const:val=10 const:val=20
C.const:val=10 val=20
D.val=10 val=20
2-11下面关于成员函数和常成员函数的程序,其主函数中错误的语句是(C)
#include<iostream>
using namespace std;
class MyClass {
public:
MyClass(int x): val(x) {}
void Set(int x) {val = x;}
void Print()const {cout << "val=" << val << '\t';}
private:
int val;
};
int main() {
const MyClass obj1(10);
MyClass obj2(20);
obj1.Print(); //语句 1
obj2.Print(); //语句 2
obj1.Set(20); //语句 3
obj2.Set(30); //语句 4
return 0;
}
A.语句 1
B.语句 2
C.语句 3
D.语句 4
2-12
若类A的构造函数定义为
A(int aa=1, int bb=0) { a = aa; b = bb; }
则执行:A x(4);后,x.a和x.b的值分别是(C )
A.1,0
B.1,4
C.4,0
D.4,1
2-13
下面程序的运行结果为(C)
#include<iostream.h>
class A
{
int num;
public:
A(int i){num=i;}
A(A &a){num=a.num++;}
void print(){cout<<num;}
};
void main()
{
A a (1),b(a);
a.print();
b.print();
}
A.11
B.12
C.21
D.22
2-14
现有类的定义如下:
class MyClass {
public:
MyClass(int x): val(x) {}
void Print() const {cout << "const:val=" << val << '\t';}
void Print() {cout << "val=" << val << '\t';}
private:
int val;
};
在main函数中定义该类的l两个对象:const MyClass obj1(10); MyClass obj2(20);
依次执行obj1.Print(); obj2.Print();的输出结果是(C)。
A.val=10 const:val=20
B.const:val=10 const:val=20
C.const:val=10 val=20
D.val=10 val=20