概述
C++基础测试
一:选择题(每题2分,其29题)
1.关于类和对象不正确的是( )
A:类是一种类型,它封装了数据和操作
B:对象是类的实例
C:一个类的对象只有一个
D:一个对象必属于某个类
2.在类定义的外部去访问类中的成员,类中的成员可以被访问的有( )(友元除外)
A:所有类成员 B:private或protected成员
C:public成员 D:public或private成员
3.关于this指针的说法错误的是( )
A:this必须显示说明 B:构造函数中可以使用this
C:成员函数可使用this D:静态成员函数不拥有this指针
4.声明一个类的对象时,系统自动调用()函数
A:成员函数 B:构造函数 C析构函数 D普通函数
5.下面对构造函数的不正确描述是()
A:系统可以提供默认的构造函数 B构造函数可以有参数,所以可以有返回值
C:构造函数可以重载 D构造函数可以设置默认参数值
6.下面对析构函数的正确描述是()
A:系统不能提供析构函数 B析构函数必须由用户定义
C析构函数没有参数 D析构函数可以设置默认参数值
7.对静态成员<static修饰的成员>的不正确描述是()
A:静态成员不属于对象,是类的其享成员
B:静态数据成员要在类外定义和初始化
C:调用静态成员函数时要通过类或对象激活,所以静态成员函数拥有this指针
D:非静态成员函数也可以访问静态数据成员
8.下面选项中,不是类的函数为()
A:构造函数 B:析构函数 C:C函数 D缺省参数的构造函数
9.下面对友元的错误描述是()
A)关键字friend用于声明友元
B)一个类的成员函数可以是另一个类的友元成员函数
C)友元成员函数访问对象的成员不受访问权限修饰符影响
D)C函数可以通过this指针访问对象成员
10.在c++中,类与类之间的继承关系具有()
A自反性 B)对称性 C传递性 D)反对称性
11.下列关于类的继承描述中,( )是错误的
A)派生类一定可以访问基类的所有数据成员,也能调用基类的所有成员函数
B)基类全部属性和方法与派生类不一定相同
C)继承描述类的层次关系,派生类可以具有与基类相同的属性和方法
D)一个基类可以有多个派生类,一个派生类可以有多个基类
12.当一个派生类公有继承一个基类时,基类中的所有公有成员成为派生类的()
A)public成员 B)private成员C)protected成员D)友元
13.当一个派生类私有继承一个基类时,基类中的所有公有成员和保护成成员成为派生类的()
A)public成员 B)private成员 C)protected成员 D)友元
14.下面描述中,错误的是( )
A)在基类定义的public成员在公有继承的派生类中可见,也能在类外被访问
B) 在基类定义的public和protected成员在私有继承的派生类中可见,在类外可以被访问
C)在基类定义的public和protected成员在保护继承的派生类中可见
D) private成员在类外函数中被访问,类外函数需要进行友元访问声明
15.在C++中,一定不能被派生类继承的成员是()
A)成员函数 B)构造函数与析构函数 C)成员变量 D)虚函数
16.在创建派生类对象时(对象成员在派生类中),构造函数的执行顺序是( )
A)对象成员构造函数、基类构造函数、派生类本身的构造函数
B)派生类本身的构造函数、基类构造函数、对象成员构造函数
C)基类构造函数、派生类本身的构造函数、对象成员构造函数
D)基类构造函数、对象成员构造函数、派生类本身的构造函数
17关于常成员函数说明正确的是
A)常成员函数的函数体中能修改对象
B)常成员函数可以访问非常成员函数
C)非常成员函数不可以访问常成员函数
D)常成员函数中能访问常成员函数
18.在C++中,要实现动态联编,可以使用( )调用虚函数
A)类名
B)派生类指针
C)对象名
D)基类指针或基类的引用
19.下列函数中,可以作为虚函数的是()
A)C函数 B)构造函数 C)成员函数、析构函数 D)C风格的友元函数
20.下面函数原形声明中,()声明了fun为虚函数
A)void fun()=0; B)virtual void fun()=0;
C)virtual void fun(); D)virtual void fun() { };
21.假设A为抽象类,下列声明()是正确的
A)A fun(int); B)A *p; C)int fun(A); D)A Obj;
22.下面描述中,正确的是( )
A)虚函数是没有实现的函数 B)纯虚函数可以被派生类实现
C)抽象类是没有纯虚函数的类 D)抽象类不能创建指针或引用
23)已知obj是一个对象,下面哪一个是不可能出现的?()
[A] obj.100 [B] !obj [C] obj++ [D] int r = obj+100
24 下述程序中,类C的public各有哪些属性成员( )。
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 下述程序运行后,显示结果为( )。
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 [A]
constructing B2 2
constructing B1 1
constructing B3 *
constructing B1 3
constructing B2 4
constructing 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 下列的模板说明中正确的是()
A.template<typename T1,T2>
B.template<class T1,T2>
C.template<class T1,class T2>
D.template<typename T1,typename T2>
27 关于函数模板描述错误的是()
A函数模板必须由程序员实例化为可执行的函数模板
B.函数模板的实例化由编译器实现
C.一个类定义中,只要有一个函数模板,则这个类是类模板
D.类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
28 函数模板定义如下:
template <typename T>
Max( T a, T b ,T &c){c=a+b;}
下列选项正确的是()
- int x, y; char z;
Max(x, y, z);
- double x, y, z;
Max( x, y, z);
C.int x, y; float z;
Max( x, y, z);
D.float x; double y, z;
Max( x,y, z);
29. 下列有关模板的描述正确的, 类模板的模板参数()
A.不能作为数据成员的类型
B.不能作为成员函数的返回类型
C.不能作为成员函数的参数类型
D.以上三种均是错误的说法
30.下列有关迭代器描述错误的是( )
A.迭代器本身是一个对象
B.迭代器对*运算符进行了重载
C.迭代器本质上是一个复杂的指针
D.迭代器可以访问任何对象
二、判断题(每题1分,共6题),正确勾,错误打叉
1. 执行语句A *p = A a[100];时,类A的构造函数会被调用100次。(× )
2. 一个类中的成员函数重载(overload)可以用const修饰符、函数原型的参数个数、对应位置的参数的类型和返回值类型为依据。(√ )
3. 实例化派生类对象时, 一定会调用到基类的某一个构造函数。(√ )
4. 如果类A是类B的友员, 类D以public继承方式从类B继承,则类A也是类D的友员。( ×)
5. 在同一个类中,可以定义重载的成员函数 (×)
- 在public继承方式下,基类中被说明为protected和private的成员能被其派生 类的成员函数访问。(× )
- 简答题(12分),结合面向对象思想回答下面问题;
- 什么时候使用组合?
两个及以上相互独立的类能够放在一起,然后通过一个类就可以调用另一个类的对象从而调用另一个类的功能。
- 什么时候使用重写的虚函数?
两个类有继承关系的时候,派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类 型、函数名字、参数列表完全相同),称子类的虚函数重写了基类的虚函数。
3、有类定义
class Test
{
int a,b;
public:
Test ( int m, int n ) { a=m; b=n; }
void Set( int m, int n ) { a=m; b=n; }
//......
};
有人认为“Test和Set函数的功能一样,只要定义其中一个就够了”。这种说法正确吗?
不正确
为什么?
因为Test是有参构造函数,实例化对象的时候就可以改变a,b的值;而Set是普通函数,调用才能使用。
四、改错题:指出下面程序的错误或不恰当的地方,并且修改正确。(12分)
“circle.h”文件内容
class circle{
private:
int radius =0 ;
public:
virtual circle();// circle();
//构造函数不可为虚函数
~circle();
};
circle.cpp文件内容
#include “circle.h”
#include<iostream>
using namespace std;
circle::circle()
{
cout<<"Here is constructorn";
this->radius=6;
return radius;// 去掉
//构造函数不能有返回值
}
void circle::~circle() // circle::~circle()
//析构函数不能有返回类型
{
cout<<"Here is destructorn";
}
//没有主函数
五、编程题(12)
“姓名”和“性别”是教师、学生共有的属性,“职称”和“工资”是教师特有的属性, “班级”和“成绩”是学生特有的。 请用类模拟?
#include"iostream"
using namespace std;
class School
{
public:
string name;
string sex;
};
class Teacher : public School
{
public:
string posts;
int wages;
};
class Student : public School
{
public:
string classroom;
int grades;
};
int main()
{
return 0;
}
最后
以上就是甜蜜煎饼为你收集整理的这是一份普通的cpp答卷,可能有错的全部内容,希望文章能够帮你解决这是一份普通的cpp答卷,可能有错所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复