};
intmain()
{
DERIVED('X');
return0;
}
执行上面的程序将输出(C)。
A)X B)YX C)XY D)Y
8.类MyClass的定义如下:
classMyClass
{public:
MyClass(){value=0;}
SetValue(inti){value=i;}
private:
intvalue;
};
则对语句:
MyClass*p,my;p=&my;正确的描述是(D)。
A.语句p=&my;是把对象my赋值给指针变量p;B.语句MyClass*p,my;会调用两次类MyClass的构造函数
C.对语句*(5)的调用是正确的D.语句p->SetValue(5)与(5)等价
9.下列各类函数中,C不是类的成员函数。
A.构造函数B.析构函数C.友元函数D.拷贝构造函数
10. 派生类的对象对它的基类成员中A是可以访问的。
A.公有继承的公有成员B.公有继承的私有成员C.公有继承的保护成员D.私有继承的公有成员
二、填空题(每空2分,共30分)
1.定义内联函数所用的关键字inline,定义友元所用的关键字为friend。
2.当一个派生类具有多个基类时,这种继承方式称为_多重继承__。
3.通过一个构造函数调用虚函数时,C++系统对该调用采用静态联编。
4.任何类中允许有_privated____、public____、_protected____三种访问控制类型的成员,数据成员和成员函数的默认类型为__privated___。
5.只有在公有继承的情况下,基类和派生类之间才有赋值兼容性规则。
6.C++标准库中的异常层次的根类定义在库的头文件_
______中。
7.运算符重载使用的两种方式是_____成员函数______和友元函数_______。
8.C++支持面向对象程序设计的四个要素是:
抽象性、多态性________、封装性________和____继承性____。
一、单项选择题(每题2分,共20分)
1.下面有关构造函数和new运算符关系正确的说法是(D)
A.new运算符不调用构造函数B.构造函数一定调用new运算符
C.当生成新类的实例时,先调用new运算符,然后调用构造函数进行初始化
D.当new运算符动态产生类的对象时,new运算符也自动调用构造函数
2.下面有关类性质的说法错误的是(D)
A.一个类可以有多个构造函数,但只有一个析构函数B.析构函数和构造函数都不能有返回类型
C.不能给析构函数指定参数D.一个类中不可以声明具有类类型的数据成员
3.下面关于友元函数描述正确的是(C)
A.友元函数是类的成员B.友元函数在类的外部声明C.友元函数在类中声明D.友元函数能够派生
4.下面叙述正确的是(D)
A.派生类不可以使用私用派生B.保护派生时,基类的保护成员在派生类中是公有的
C.对基类成员的访问允许二义性D.赋值兼容规则也适用于多重继承的组合
5.有关运算符重载正确的描述是(D)
A.C++语言允许在重载运算符时改变运算符的操作个数B.C++语言允许在重载运算符时改变运算符的优先级
C.C++语言允许在重载运算符时改变运算符的结合性D.C++语言允许在重载运算符时改变运算符的原来的功能
6.下面描述中,表达错误的是(B)
A.公有继承时基类中的public成员在派生类中仍是public的B.公有继承是基类中的private成员在派生类中仍是private的
C.公有继承时基类中的protected成员在派生类中仍是protected的
D.私有继承时基类中的public成员在派生类中是private的
7.拷贝构造函数的参数是(C)
A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名
8.下列关于构造函数的描述中,错误的是(D)
A.构造函数可以设置默认参数B.构造函数在定义类对象时自动执行C.构造函数可以是内联函数D.构造函数不可以重载
9.数组作为函数的形参时,把数组名作为实参,传递给函数的是(A)
A.该数组的首地址B.该数组的元素个数C.该数组中的各元素值D.该数组的大小
10.通过一个析构函数调用虚函数时,C++系统对该调用采用( B)。
A.动态联编B.静态联编C.不确定是哪种联编D.函数重载
二、填空题(每空2分,共30分)
1.成员名限定的符号是:
:
,它可以在引用成员时避免二义性。
2.只有在公有继承的情况下,基类和派生类之间才有赋值兼容性规则。
3.模板分为类模板和函数模板。
4.在用class定义一个类时,数据成员和成员函数的默认访问权限是private。
5.已知intDBL(intn){returnn+n;}和longDBL(longn){returnn+n;}是一个函数模板的两个实例,则该函数模板的定义是template<typename T> T DBL(T n){return n+n}。
(要求写出函数模板的完整定义)
6.静态数据成员必须在类外进行初始化。
7.含有纯虚函数的类称为抽象类。
8.若Queue是一个类,aQueue是它的一个对象,而且该类中定义了一个静态成员函数show()则在类外对该成员的函数进行调用的方式可以为()和Queue:
:
show()。
9.定义内联函数所用的关键字为inline,定义友元所用的关键字为friend。
10.使用成员函数重载运算符时,若运算符是二元的,则参数表中有1个操作数,此时 当前对象作为此运算符的左操作数。
一、单项选择题(每题2分,共20分)
1.下面有关重载函数的说法中正确的是(C)
A.重载函数必须具有不同的返回值类型; B.重载函数形参个数必须使用string类建立对象的不正确方式是(D)。
A.stringstr(“OK”);B.stringstr=”OK”;C.stringstr;D.stringstr=’OK’;
3.面关于C++中类的继承与派生的说法错误的是(C)
A.基类的protected成员在公有派生类的成员函数中可以直接使用
B.基类的protected成员在私有派生类的成员函数中可以直接使用
C.私有派生时,基类的所有成员访问权限在派生类中保持不变
D.继承可以分为单一继承与多重继承
4.面向对象程序设计将数据与(A)放在一起,作为一个相互依存、不可分割的整体来处理。
A.对数据的操作B.信息C.数据隐藏D.数据抽象
5.一个类的析构函数A。
A.唯一的B.允许重载C.至多可有两个D.只能是缺省的
6.下列各类函数中,(C)不是类的成员函数。
A.构造函数B.析构函数C.友元函数D.拷贝构造函数
7.在下面选项中,对类的拷贝构造函数的声明形式是(B)
A.A:
:
A(&)B.A:
:
A(constA&)C.A:
:
A(A)D.voidA:
:
A(A&a)
8.下面关于静态成员描述正确的是(B)
A.静态成员是对象的数据成员B.静态成员是对象的成员C.静态成员是对象的成员函数D.静态成员不是对象的成员
9.下面关于成员函数特征的描述中,错误的是(A)
A.成员函数不可以设置参数的默认值B.成员函数可以重载C.成员函数可以是内联函数D.成员函数可以是静态的
10.下面叙述正确的是(D)
A.基类的保护成员在派生类中仍然是保护的B.基类的公有成员在派生类中仍然是公有的
C.基类的私有成员在派生类中是私有的D.从基类派生时,可以有3种派生方法
1.classbase{
inta;
public:
intb;intf(inti,intj);
};
classderive:
base{
intc;
public:
intbase:
:
b;
base:
:
f(inti,intj);
};
[1]
[2]
2.#include<>
classA{
public:
voidA(inti=0){m=i;}
voidshow(){cout<void~A(){}
private:
intm;};
voidmain()
{
Aa(5);
+=10;
();
}
[3]
[4]
[5]
3.#include
usingnamespacestd;
classbase{
inta;
staticintb;
public:
base(intm,intn):
a(m),b(n){}
staticintgeta(){returna;}
staticintgetb(){returnb;}
voidshow(){cout<};
base:
:
intb=45;
voidmain(){}
[6]
[7]
[8]
[1]intbase:
:
b;
[2]base:
:
f(inti,intj);
[1]base:
:
b;(或访问声明仅仅调整名字的访问,不可为它说明任何类型)
[2]base:
:
f;(或访问声明不应说明函数参数)
[3]voidA(inti=0){m=i;}
[4]void~A(){}
[5]+=10;
[3]构造函数去掉void(或构造函数不能指定返回值类型)
[4]析构函数去掉void(或析构函数不能指定返回值类型)
[5]对象不能访问私有成员
[6]base(intm,intn):
a(m),b(n){}
[7]staticintgeta(){returna;}
[8]base:
:
intb=45;
[6]不能通过构造函数初始化静态数据成员(只要把b(n)去掉即可)
[7]静态成员函数中不能引用非静态成员数据成员(或去掉static)
[8]intbase:
:
b=45;
1.Template
Tfun(Tx)
{
Ty;
y=T-2*x;
retruny;
}
[1]
[2]
2.classbase
{
public:
f();
f(inta);
f(char*p);
};
classderive:
base
{
public:
voidf(ints);
base:
:
f;
};
3.#include<>
classA
{public:
voidsetA(int);
voidshowA();
private:
inta;
};
classB
{public:
voidsetB(int);
voidshowB();
private:
intb;
};
classC:
publicA,privateB
{public:
voidsetC(int,int,int);
voidshowC();
private:
intc;
};
voidA:
:
setA(intx)
{a=x;}
voidB:
:
setB(intx)
{b=x;}
voidC:
:
setC(intx,inty,intz)
{
a=x;
b=y;
setA(x);
setB(y);
c=z;
}
[1]Template
[2]y=T-2*x;
[1]改为template
[2]T不能用作-的操作数
[3]base:
:
f;
[3]派生类中具有与基类同名的函数,则基类中的此函数不能在派生类中进行访问声明
[4]a=x;
[5]b=y;
[6](6);
[7]();
[8]return0;
[4]派生类不能访问基类A类的私有成员
[5]派生类不能访问基类B类的私有成员
[6]不能访问B类的公有成员setB
[7]不能访问B类的公有成员showB
[8]去掉此语句,或主函数的返回值void去掉或改为int
一、填空(每题2分,共20分)
1、C++程序中,对象的初始化和清理工作,分别由两个特殊的成员函数()和()来完成。
2、在c++中,分别用(变量)与(函数)来表现某种事物的所具有的属性和行为,并且将它们封装在一起,形成一种抽象数据类型——类。
3、当用一个对象初始化另一个新的同类对象,将调用(),其特殊之处在于:
形参是()。
4、模板是C++支持参数化的工具,我们通常用类模板和函数模板,这些只是面向对象的()性的一个方面。
5、如果在某个类定义中用关键字()声明了一个外部函数(也许是其他类的一个成员)后,这个外部函数就可以例外的访问该类的任何成员,这个外部函数称为类的()函数。
6、可以将类的成员声明为stat