};
class D:public B{ protected;
void fun3(){} };
已知obj是类D的对象,下列语句中不违反成员访问控制的权限的是
A obj.fun1(); B obj.var1; C obj.fun2(); D obj.fun3(); (59)有如下程序:
#include
void output(){cout<<1;}
virtual void print() {cout<< ‘B’;} };
class derived:public base{ public:
void output(){cout<<2;} void print(){cout<< ‘D’;} };
int main()
base * ptr=new derived; ptr->output(); ptr->print(); delete ptr; return 0; }
程序的输出结果是
A 1B B 1D C 2B D 2D
(60)下列是重载乘法运算的函数原型声明,其中错误的是 A myclass operator*(double,double); B myclass operator*(double,myclass); C myclass operator*(myclass,double); D myclass operator*( myclass , myclass); (61) 有如下程序:
#include
virtual void show(){cout<< \ };
class D:public B { public:
void show(){cout<< \ };
void fun1(B *ptr){ptr->show();} void fun2(B &ref){ref.show();} void fun3(B b){b.show();}
int main(){
B b,*p=new D; D d; fun1(p); fun2(b); fun3(d); return 0 ; }
程序的输出结果是
A) DBD B) BBD C) DBB D) DBD (62)下列关于类定义的说法中,正确的是
A)类定义中包括数据成员和函数成员的声明 B)类成员的缺省访问权限是保护的 C) 数据成员必须被声明为私有的 D)成员函数只能在类体外进行定义
(63)下列关于派生类构造函数和析构函数的说法中,错误的是 A)派生类的构造函数会隐含调用基类的构造函数
B)如果基类中没有缺省构造函数,那么派生类必须定义构造函数
C)在建立派生类对象时,先调用基类的构造函数,再调用派生类的构造函数 D)在销毁派生类对象时,先调用基类的析构函数,再调用派生类的析构函数 (64)一个类如果没有定义任何函数,编译器不会自动为这个类产生_____ 。 A. 拷贝构造函数 B. 无参构造函数 C. 输出流运算符 D. 赋值运算符
(65)有如下函数模板:
template T souare(T x) (retumx * x ;) 基中T是 A)函数形参 B)函数实参 C)模板形参 D)模板实参
(66)使用输入输出操作符setw,可以控制 A)输出精度 B)输出宽度 C)对齐方式 D)填充字符
(67)下列有关继承和派生的叙述中,正确的是 A) 派生类不能访问基类的保护成员 B)作为虚基类的类不能被实例化
C)派生类应当向基类的构造函数传递参数 D)虚函数必须在派生类中重新实现
(68)下列关于构造函数的描述中,错误的是()
??A)构造函数可以设置默认参数; B)构造函数在定义类对象时自动执行 ??C)构造函数可以是内联函数; D)构造函数不可以重载 (69)下面描述中,表达错误的是()
??A)公有继承时基类中的public成员在派生类中仍是public的
??B)公有继承时基类中的private成员在派生类中仍是private的 ??C)公有继承时基类中的protected成员在派生类中仍是protected的 ??D)私有继承时基类中的public成员在派生类中是private的 (70)应在下列程序划线处填入的正确语句是() ??#include ??class Base ??{ public:
?? void fun(){cout<<\
};
??class Derived:public Base ??{ void fun()
?? {_____________ //显示调用基类的函数fun() ?? cout<<\??};
??A)fun(); B)Base.fun(); C)Base::fun(); D) Base->fun(); (71)下列关于构造函数的描述中,错误的是()
A)构造函数可以设置默认参数; B)构造函数在定义类对象时自动执行 C)构造函数可以是内联函数; D)构造函数不可以重载 (72)下列说法正确的是:
A) 一个类的对象可以是另一个类的成员 B)一个类可以作为另一个类的派生类 C)一个类定义在另一个类的说明中 D)以上说法均正确
(73)C++函数的声明和定义可以分开。函数声明不需要。 A)返回类型 B)函数名 C)参数表 D) 函数体
(74)private访问属性限制对象的成员可以在_____ 中访问。 A)本类的成员函数 B) main函数
C) 父类的成员函数 D) 子类的成员函数
(75)如果定义了一个类myclass,则为myclass类对象以成员函数形式重载后++运算符的声明应该为_______。
A) myclass operator++(); B) myclass& operator++(); C)myclass operator++( int ); D) myclass& operator++( int );
(76)如果myclass类定义了拷贝构造函数和一个整型参数的构造函数,还重载了赋值运算符,那么语句
myclass obj = 100;会 _______。等价于 myclass obj = myclass(100) A) 调用拷贝构造函数
B) 调用整型参数的构造函数 C)调用赋值运算符 D) 引起编译错误
(77)抽象类指的是_____ 。
A)没有任何成员的类
B) 只有成员函数没有数据成员的类 C) 有虚函数的类 D)有纯虚函数的类
(78)多重继承时,如果派生类的两个父类有一个共同的虚基类,那么虚基类的初始化参数由 ______ 的构造函数来传递。 A) 第一个父类 B)第二个父类 C) 派生类 D) 以上都不是
(79)多态性是通过_____实现的。 A)构造函数 B)析构函数 C) 虚函数 D) 函数重载
(80)如果有如下语句 char str[20]; cin >> str; cout << str;
执行时输入的是this is a test line!,则输出的内容是_____ 。 A) this is a test line! B) this is a test line C) this is a test D) this
(81)用cin为整型变量输入数据时,如果从键盘输入的不是数字,输入后整型变量中的结果会是:_____ A) 0 B) 负数 C) 正数 D)不确定
(82)C++异常处理机制中没有______ 。 A)try B) throw C) catch D) finally
(83)要打开一个文件并从中读取数据,应该使用_____类的对象。 A)istream B)ostream C)ifstream D) ofstream
(84)如果在try块中用 throw \;
语句抛出一个异常,则参数类型是______的catch块能够捕获这个异常。 A) char *
B) const char * C) char
D)const char
(85)假定AB为一个类,则执行AB x;语句时将自动调用该类的( ) A.有参构造函数 B.无参构造函数 C.拷贝构造函数 D.赋值构造函数
(86)重载函数在调用时选择的依据中,错误的是( ) A.函数的参数 B.参数的类型 C.函数的名字 D.函数的类型 二、填空题
(1)在C++语言的结构化程序设计中, 函数 是程序的基本组成单元;在C++语言的面向对象设计框架中, 类 是程序的基本组成单元。
(2)C++语言提供的基本控制结构可以分为3种类型:顺序结构、 选择结构 和循环结构。 (3)对于下面定义的类MyClass,请在函数f()中添加对象成员把n的值修改为50。
class MyClass {
public:
MyClass(int x){n = x;}
void SetNum(int nl){n = nl;} private: int n; };
int f() {
MyC1ass *ptr = new MyClass(45); ptr->SetNum(50) }
(4)继承的方式有公有继承、私有继承和 保护继承 3种。 (5)表达式operator+(x,y)还可以表示为 x+y 。
(6)类模板的使用实际上是将类模板实例化成一个具体的 类 。
(7)开发一个C++语言程序的步骤通常包括编辑、 编译 、链接、运行和调试。 (8)通过使用new和delete两个运算符进行的分配为 动态 存储分配。
(9)在C++语言中,访问一个对象的成员所用的运算符是成员选择运算符. ,访问一个指针所指向的对象的成员所用的运算符是成员访问运算符 -> 。
(10)C++语言支持的两种多态性分别是编译时的多态性和运行时 的多态性。 (11)重载的运算符保持其原有的 操作数个数 、优先级和结合性不变。 (12)cout.put(′A′);,还可以表示为cout<<’A’ 。
(13)C++中封装性、继承性和多态性 是面向对象思想的主要特征。
(14)假定A为一个类,则语句A(A &a);为该类拷贝构造 函数的原型说明。
(15)派生类构造函数的执行顺序是先执行基类 的构造函数,然后执行成员对象的构造函数,最后执行派生类 的构造函数。
(16)当一个成员函数被调用时,该成员函数的 this指针 指向调用它的对象。
(18)派生类的成员一般分为两部分,一部分是 从基类继承的成员 ,另一部分是自己定义的新成员。
(19)如果要把返回值为void的函数A声明为类B的友元函数,则应在类B的定义中加入的语句是 friend void A();。
(20)如果类B继承了类A,则称类A为类B的基类,类B称为类A的 派生类 。 (21)将x+y中的+运算符用友元函数重载应写为 operator+(x,y) 。 (22)已知程序的结果为1 2 3,请填空。
#include