C++基础测试
一:选择题(每题2分,其29题)
1.关于类和对象不正确的是(C)
A:类是一种类型,它封装了数据和操作
B:对象是类的实例
C:一个类的对象只有一个
D:一个对象必属于某个类
2.在类定义的外部去访问类中的成员,类中的成员可以被访问的有( C)(友元除外)
A:所有类成员 B:private或protected成员
C:public成员 D:public或private成员
3.关于this指针的说法错误的是(A )
A:this必须显示说明 B:构造函数中可以使用this
C:成员函数可使用this D:静态成员函数不拥有this指针
4.声明一个类的对象时,系统自动调用(B)函数
A:成员函数 B:构造函数 C析构函数 D普通函数
5.下面对构造函数的不正确描述是(B)
A:系统可以提供默认的构造函数 B构造函数可以有参数,所以可以有返回值
C:构造函数可以重载 D构造函数可以设置默认参数值
6.下面对析构函数的正确描述是(C)
A:系统不能提供析构函数 B析构函数必须由用户定义
C析构函数没有参数构造函数可以被重载 D析构函数可以设置默认参数值
7.对静态成员<static修饰的成员>的不正确描述是( C)
A:静态成员不属于对象,是类的其享成员
B:静态数据成员要在类外定义和初始化
C:调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
D:非静态成员函数也可以访问静态数据成员
8.下面选项中,不是类的函数为( C )
A:构造函数 B:析构函数 C:C函数 D缺省参数的构造函数
9.下面对友元的错误描述是(D )
A)关键字friend用于声明友元
B)一个类的成员函数可以是另一个类的友元成员函数
C)友元成员函数访问对象的成员不受访问权限修饰符影响
D)C函数可以通过this指针访问对象成员
10.在c++中,类与类之间的继承关系具有( C)
A自反性 B)对称性 C传递性 D)反对称性
11.下列关于类的继承描述中,( A)是错误的
A)派生类一定可以访问基类的所有数据成员,也能调用基类的所有成员函数
B)基类全部属性和方法与派生类不一定相同
C)继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
D)一个基类可以有多个派生类,一个派生类可以有多个基类
12.当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的(A)
A)public成员 B)private成员C)protected成员D)友元
13.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成成员成为派生类的(B)
A)public成员 B)private成员 C)protected成员 D)友元
14.下面描述中,错误的是( B)
A)在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问
B) 在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问
C)在基类定义的public和protected成员在保护继承的派生类中可见
D) private成员在类外函数中被访问,类外函数需要进行友元访问声明
15.在C++中,一定不能被派生类继承的成员是( B)
A)成员函数 B)构造函数与析构函数 C)成员变量 D)虚函数
16.在创建派生类对象时,构造函数的执行顺序是(D )
A)对象成员构造函数、基类构造函数、派生类本身的构造函数
B)派生类本身的构造函数、基类构造函数、对象成员构造函数
C)基类构造函数、派生类本身的构造函数、对象成员构造函数
D)基类构造函数、对象成员构造函数、派生类本身的构造函数
17关于常成员函数说明正确的是( D)
A)常成员函数的函数体中能修改对象
B)常成员函数可以访问非常成员函数
C)非常成员函数不可以访问常成员函数
D)常成员函数中能访问常成员函数
18.在C++中,要实现动态联编,可以使用( D)调用虚函数
A)类名
B)派生类指针
C)对象名
D)基类指针或基类的引用
19.下列函数中,可以作为虚函数的是(C)
A)C函数 B)构造函数 C)成员函数、析构函数 D)C风格的友元函数
20.下面函数原形声明中,(C)声明了fun为虚函数
A)void fun()=0; B)virtual void fun()=0;
C)virtual void fun(); D)virtual void fun() { };
21.假设A为抽象类,下列声明(B)是正确的
A)A fun(int); B)A *p; C)int fun(A); D)A Obj;
22.下面描述中,正确的是(B )
A)虚函数是没有实现的函数 B)纯虚函数可以被派生类实现
C)抽象类是没有纯虚函数的类 D)抽象类不能创建指针或引用
23)已知obj是一个对象,下面哪一个是不可能出现的?(A/D)
[A] obj.100 [B] !obj [C] obj++ [D] int r = obj,100
24 下述程序中,类C的public各有哪些属性成员( B )。
class B1
{
public:
int i ;
protected :
int k ;
};
class B2
{
public:
int l ;
private:
int m;
protected :
int q ;
};
class B3
{
public:
int p1;
};
class C: public B2, protected B1, private B3
{
public:
int c;
};
[A] i/l/p1 [B] c/l [C] c/l/q [D] i/l/q
25 下述程序运行后,显示结果为( A )。
class B1
{
public:
B1(int i) {cout<<"constructing B1 "<<i<<endl;}
~B1( ) {cout<<"destructing B1 "<<endl;}
};
class B2
{
public:
B2(int j) {cout<<"constructing B2 "<<j<<endl;}
~B2( ) {cout<<"destructing B2 "<<endl;}
};
class B3
{
public:
B3( ){cout<<"constructing B3 *"<<endl;}
~B3( ) {cout<<"destructing B3 "<<endl;}
};
class C: public B2, public B1, public B3
{
public:
C(int a, int b, int c, int d): B1(a),memberB2(d),memberB1(c),B2(b)
{
}
private:
B1 memberB1;
B2 memberB2;
B3 memberB3;
};
void main( )
{
C obj(1,2,3,4);
}
[A]
constructing B2 2 [B] constructing B1 1
constructing B1 1 constructing B2 2
constructing B3 * constructing B3 *
constructing B1 3 constructing B1 3
constructing B2 4 constructing B2 4
constructing B3 * constructing B3 *
destructing B3 destructing B3
destructing B2 destructing B2
destructing B1 destructing B1
destructing B3 destructing B3
destructing B1 destructing B1
destructing B2 destructing B2
[C]
constructing B2 2 [D] constructing B2 2
constructing B1 1 constructing B1 1
constructing B3 * constructing B3 *
constructing B1 3 constructing B3 *
constructing B2 4 constructing B1 3
constructing B3 * constructing B2 4
destructing B3 destructing B3
destructing B2 destructing B2
destructing B1 destructing B1
destructing B3 destructing B3
destructing B2 destructing B1
destructing B1 destructing B2
26 下列的模板说明中正确的是 (C/D)
A.template<typename T1,T2>
B.template<class T1,T2>
C.template<class T1,class T2>
D.template<typename T1,typename T2>
27 关于函数模板描述错误的(D)
A函数模板必须由程序员实例化为可执行的函数模板
B.函数模板的实例化由编译器实现
C.一个类定义中,只要有一个函数模板,则这个类是类模板
D.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
28 函数模板定义如下:
template <typename T>
Max( T a, T b ,T &c){c=a+b;}
下列选项正确的是(B)
A. int x, y; char z;
Max(x, y, z);
B. double x, y, z;
Max( x, y, z);
C.int x, y; float z;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论