};
voidmain()
{A1obj1;
A2obj2;
A3obj3;
…
}
以下不合法的调用语句是()。
A)obj1.show1(); B)obj2.show1();
C)obj3.show1(); D)obj2.show2();
(14)下列关于动态联编的描述中,错误的是()。
A)动态联编是以虚函数为基础
B)动态联编是运行时确定所调用的函数代码的
C)动态联编调用函数的操作是通过指向对象的指针或对象引用实现的
D)动态联编是在编译时确定操作函数的
(15)友元运算符obj1>obj2被C++编译器解释为()。
A)operator>(obj1,obj2) B)>(obj1,obj2)
C)obj2.operator>(obj1) D)obj1.operator>(obj2)
(16)下面描述中,表达错误的是()。
A)公有继承时基类中的public成员在派生类中仍是public的
B)公有继承时基类中的private成员在派生类中仍是private的
C)公有继承时基类中的protected成员在派生类中仍是protected的
D)私有继承时基类中的public成员在派生类中是private的
(17)一个C++类()。
A)只能有一个构造函数和一个析构函数 B)可以有一个构造函数和多个析构函数
C)可以有多个构造函数和一个析构函数 D)可以有多个构造函数和多个析构函数
(18)派生类的对象对它的基类成员中()是可以访问的。
A) 公有继承的公有成员
B) 公有继承的私有成员
C) 公有继承的保护成员
D) 私有继承的公有成员
(19)有关析构函数的说法不正确的是()。
A) 析构函数有且只有一个
B) 析构函数无任何函数类型
C) 析构函数和构造函数一样可以有形参
D) 析构函数的作用是在对象被撤销时收回先前分配的内存空间
(20)以下属于析构函数特征的是( )
A)析构函数名与类名不能相同 B)析构函数的定义必须在类体内
C)析构函数可以带或不带参数 D)在一个类中析构函数有且仅有一个
(21)设有以下类和对象的定义:
classA
{public:
intm;
...
};
Ak1,k2,*p1,*p2;
则下面针对成员变量m的引用,正确的是( )
A)k1.m=1; B)k2->m=2; C)p1.m=3; D)(*p2)->m=4;
(22) 以下有关成员函数特征的叙述不正确的是( )
A)成员函数一定是内联函数 B)成员函数可以重载
C)成员函数可以设置缺省数值 D)成员函数可以是静态的
(23)以下叙述中不正确的是( )
A)一个类的友元函数可以无条件的使用这个类的私有成员
B) 静态成员函数可以直接访问非静态数据成员
C)不可以声明抽象类的对象,但可以声明抽象类的指针变量
D)静态数据成员为类的所有对象所共享
(24) 以下为Cint类的私有变量n赋初值的形式中不正确的是( )
A) classCint B)classCint
{ intn; { intn;
Cint():
n(0){} Cint(intv):
n(v){}
… ….
}; };
C)classCint D)classCint
{ intn=10; { intn;
… Cint(intm=10):
{n=m;}
}; …
};};
(25)对new运算符的下列描述中,( )是错误的。
A) 它可以动态创建对象和对象数组
B) 用它创建对象数组时必须指定初始值
C) 用它创建对象时要调用构造函数
D) 用它创建的对象可以使用运算符delete来释放
二、填空
1)在用class定义一个类时,数据成员和成员函数的默认访问权限是 ⑴。
2)已知intDBL(int n){return n + n;}和longDBL(long n){return n+n;}是一个函数模板的两个实例,则该函数模板的定义是⑵。
3)类是对象的 ⑶;而对象则是类的⑷。
4)定义内联函数所用的关键字⑸,定义友元所用的关键字为⑹。
5)如类中没有明确定义析构函数,清除对象的工作由⑺来完成,原因是⑻。
6)生成一个派生类对象时,先调用⑼的构造函数,然后调用⑽的构造函数。
7)在继承关系中,⑾称为多重继承,⑿称为单继承。
8)若在I/O流的输出中使用控制符setfill()设置填充字符,应包含的头文件是⒀。
9)在私有继承关系下,基类的公有成员和保护成员将成为派生类中的⒁成员,它们只能由⒂来访问。
10)设A为test类的对象且赋有初值,则语句testB(A); 表示⒃。
11)在MFC应用程序中,⒄方法使得程序员可以不直接面对一个物理文件而进行文档的读写。
12)应用程序框架中,除⒅类以外都有统一的命名规则。
13)视图类成员函数OnDraw()的作用是⒆。
14)ClassWizard类向导的⒇页面主要用来为对话框类添加和删除与对话框控件关联的成员变量。
15)类是对象的
(1) ;而对象则是类的具体
(2)。
16)在C++中定义类时,通常是利用(3)描述对象的“特征”;利用(4) 描述对象的“行为”。
17)在私有继承关系下,基类的公有成员和保护成员将成为派生类中的(5)成员,它们只能由派生类的(6)来访问;基类的私有成员将成为派生类中的(7)成员。
18)利用“对象名.成员变量”形式访问的对象成员仅限于被声明为(8)的成员;若要访问其他成员变量,需要通过(9)函数或(10)函数。
19)单目运算符作为类成员函数重载时有(11)形参;双目运算符作为(12)重载时只需声明其右操作数,作为(13)重载时需声明全部操作数。
20)除(14)类以外,应用程序框架中类的命名规则一般遵照如下要求:
(15)
21)MFC中的(16)结构用于数据处理工作,其中(17)用于管理和维护数据,(18)用来显示和编辑数据。
22)有关对话框的常用成员函数中,(19)用来显示对话框窗口,(20)用来实现对话框数据交换。
三、程序分析题
1、写出下列程序的运行结果
#include
classCSample
{
public:
CSample();
voidDisplay();
private:
inti;
staticintk;
};
CSample:
:
CSample()
{
i=0;
k++;
}
voidCSample:
:
Display()
{
cout<<"i="<
}
intCSample:
:
k=0;
voidmain()
{
CSamplea,b;
a.Display();
b.Display();
}
2、写出下列程序的运行结果
#include
#include
classperson
{
intage;
charname[10];
public:
voidinit(inti,char*str)
{
age=i;
strcpy(name,str);
}
voiddisplay()
{
cout<}
};
voidmain()
{
persondemo;
demo.init(30,"li-ming");
demo.display();
}
3、写出下列程序的运行结果
#include
classbase
{
public:
virtualvoidshow()
{cout<<"classbaseshow()iscalled.\n";}
};
classderived:
publicbase
{
public:
voidshow()
{cout<<"classderivedshow()iscalled.\n";}
};
voiddisplay(base*obj)
{obj->show();}
voidmain()
{
basedemo1;
deriveddemo2;
display(&demo1);
display(&demo2);
}
4、指出下列程序的错误,并说明原因。
#include
classA{
public:
voidA(int i=0){m=i;}
voidshow(){cout< void~A(){}
private:
int m;
};
voidmain()
{
A a(5);
a.m+=10;
a.show();
}
5、分析找出以下程序中的错误,说明错误原因,给出两种修改方案使之能正确运行。
#include
classPoint
{
intx,y;
public:
Point(inta=0,intb=0){x=a;y=b;}
voidmove(intxoffset,intyoffset){x+=xoffset;y+=yoffset;}
intgetx(){returnx;}
intgety(){returny;}
};
classRectangle:
protectedPoint
{
intlength,width;
public:
Rectangle(intx,inty,intl,intw):
Point(x,y)
{length=l;width=w;}
intgetlength(){returnlength;}
intgetwidth(){returnwidth;}
};
voidmain()
{
Rectangler(0,0,8,4);
r.move(23,56);
cout<}
6、指出下列程序段中的错误,并说明错误原因。
classX//1
{
public:
//2
intreadme()const{returnm;}//3
voidwriteme(inti){m=i;}//4
private:
//5
intm;//6
};//7
voidf(X&x1,constX&x2)//8
{
x1.readme();//9
x1.writeme
(1);//10
x2.readme();//11
x2.writeme
(2);//12
}//13
7写出下列程序的运行结果
#include
classB
{
public:
B(){};
B(inti,intj);
voidprintb();
private:
inta,b;
};
classA
{
public:
A(){};
A(inti,intj);
voidprinta();
private:
Bc;
};
A:
:
A(inti,intj):
c(i,j)
{};
voidA:
:
printa()
{
c.printb();
}
B:
:
B(inti,intj)
{
a=i;b=j;
}
voidB:
:
printb()
{
cout<<"a="<}
voidmain()
{
Am(7,8);
m.printa();
}
8、写出下列程序的运行结果
#include
#include
classperson
{
intage;
char*name;
public:
person(inti,char*str)
{
intj;
j=strlen(str)+1;
name=newchar[j];
strcpy(name,str);
age=i;
}
~person()
{
deletename;
cout<<"destructoriscalled.\n";
}
voiddisplay()
{cout<};
voidmain()
{
persondemo(30,"Li-ming");
demo.display();
}
9、写出下列程序的运行结果
#include
classbase
{
public:
virtualvoidshow()
{cout<<"classbaseshow()iscalled.\n";}
};
classderived:
publicbase
{
public:
voidshow()
{cout<<"classderivedshow()iscalled.\n";}
};
voiddisplay(base*obj)
{obj->show();}
voidmain()
{
basedemo1;
deriveddemo2;
display(&demo1);
display(&demo2);
}