constructingCSubclass
destructingCSubclass
destructingCBaseclass
D.constructingCSubclass
constructingCBaseclass
destructingCBaseclass
destructingCSubclass
4.在一个 cpp 文件里面,定义了一个 static 类型的全局变量,下面一个正确的描述是:
A.只能在该 cpp 所在的编译模块中使用该变量
B.该变量的值是不可改变的
C.该变量不能在类的成员函数中引用
D.这种变量只能是基本类型(如 int,char)不能是 C++类型
5.观察下面一段代码:
classClassA
{
public:
virtual~ClassA(){};
virtualvoidFunctionA(){};
};
classClassB
{
public:
virtualvoidFunctionB(){};
};
classClassC:publicClassA,publicClassB
{
public:
};
ClassCaObject;
ClassA*pA=&aObject;
ClassB*pB=&aObject;
ClassC*pC=&aObject;
关于 pA,pB,pC 的取值,下面的描述中正确的是:
A.pA,pB,pC 的取值相同.B.pC=pA+pB
C.pA 和 pB 不相同 D.pC 不等于 pA 也不等于 pB
每个类的示例在内存中的时候,都会有一张虚函数表,实际上是一个指针的列表,每
个指针指向虚函数的地址空间,因此 ClassC 和 ClassA 是一样的地址,但是 ClassB 没有析
构函数,它的虚函数表中就只有一项记录,就是 FunctionB 了。
6.参照1.5的代码,假设定义了 ClassA*pA2,下面正确的代码是:
A.pA2=static_cast
(pB);
B.void*pVoid=static_cast(pB);
pA2=static_cast(pVoid);
C.pA2=pB;
D.pA2=static_cast(static_cast(pB));
7.参照1.5的代码,下面那一个语句是不安全的:
A.deletepAB.deletepBC.deletepC
8.下列程序的运行结果为:
#include
voidmain()
{
}
inta=2;
intb=++a;
cout<
B.template
C.template
D.template
12.在 Windows 编程中下面的说法正确的是:
A.两个窗口,他们的窗口句柄可以是相同的 B.两个窗口,他们的处理函数可以是相同
的
C.两个窗口,他们的窗口句柄和窗口处理函数都不可以相同.
13.下面哪种情况下,B 不能隐式转换为 A?
A.classB:publicA{}B.classA:publicB{}
C.classB{operatorA();}D.classA{A(constB&);}
14.某公司使用包过滤防火墙控制进出公司局域网的数据,在不考虑使用代理服务器的情
况下,下面描述错误的是”该防火墙能够()”.
A.使公司员工只能访问 Internet 上与其业务联系的公司的 IP 地址.
B.仅允许 HTTP 协议通过,不允许其他协议通过,例如 TCP/UDP.
C.使员工不能直接访问 FTP 服务器端口号为21的 FTP 地址.
D.仅允许公司中具有某些特定 IP 地址的计算机可以访问外部网络
15.数字字符0的 ASCII 值为48,若有以下程序:
main()
{
chara=’1’,b=’2’;
printf(“%c,”,b++);
printf(“%d\n”,b-a);
}
程序运行之后的输出结果是:
A.3,2B.50,2C.2,2D.2,50
二.填空题(共40分)
本程序从正文文件 text.in 读入一篇英文短文,统计该短文中不同单词和它的出现次数,
并按词典编辑顺序将单词及它的出现次数输出到正文文件 word.out 中.
程序用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立.然后中序遍历
该二叉树,将遍历经过的二叉树上的节点的内容输出.
程序中的外部函数
intgetword(FILE*pFile,char*pszWordBuffer,intnBufferLen);
从与 pFile 所对应的文件中读取单词置入 pszWordBuffer,并返回1;若单词遇文件尾,已无
单词可读时,则返回0.
#include
#include
#include
#include
#defineSOURCE_FILE"text.in"
#defineOUTPUT_FILE"word.out"
#defineMAX_WORD_LEN128
typedefstructtreenode
{
charszWord[MAX_WORD_LEN];
intnCount;
structtreenode*pLeft;
structtreenode*pRight;
}BNODE;
intgetword(FILE*pFile,char*pasWordBuffer,intnBufferLen);
voidbinary_tree(BNODE**ppNode,char*pszWord)
{
if(ppNode!=NULL&&pszWord!=NULL)
{
BNODE*pCurrentNode=NULL;
BNODE*pMemoNode=NULL;
intnStrCmpRes=0;
____(1)_____;pCurrentNode=*ppNode
while(pCurrentNode)
{
/*寻找插入位置*/
nStrCmpRes=strcmp(pszWord,___(2)___);pCurrentNode->szWord
if(!nStrCmpRes)
{
___(3)___;pCurrentNode->nCount++
return;
}
else
{
___(4)___;pMemoNode=pCurrentNode
pCurrentNode=nStrCmpRes>0?pCurrentNode->pRight:pCurrentNode->pLeft;
}
}
}
pCurrent=newBNODE;
if(pCurrentNode!=NULL)
{
memset(pCurrentNode,0,sizeof(BNODE));
strncpy(pCurrentNode->szWord,pszWord,MAX_WORD_LEN-1);
pCurrentNode->nCount=1;
}
if(pMemoNode==NULL)
{
___(5)___;*ppNode=pCurrentNode
}
elseif(nStrCmpRes>0)
{
pMemoNode->pRight=pCurrentNode;
}
else
{
pMemoNode->pLeft=pCurrentNode;
}
}
voidmidorder(FILE*pFile,BNODE*pNode)
{
if(___(6)___)return;!pNode||!pFile
midorder(pFile,pNode->pLeft);
fprintf(pFile,"%s%d\n",pNode->szWord,pNode->nCount);
midorder(pFile,pNode->pRight);
}
voidmain()
{
FILE*pFile=NULL;
BNODE*pRootNode=NULL;
charszWord[MAX_WORD_LEN]={0};
pFile=fopen(SOURCE_FILE,"r");
if(pFile==NULL)
{
printf("Can'topenfile%s\n",SOURCE_FILE);
return;
}
while(getword(pFile,szWord,MAX_WORD_LEN)==1)
{
binary_tree(___(7)___);//pRootNode,szWord
}
fclose(pFile);
pFile=fopen(OUTPUT_FILE,"w");
midorder(pFile,pRootNode);
fclose(pFile);
}
三.附加题(每题30分,2题,共60分)
1.从程序健壮性进行分析,下面的 FillUserInfo 函数和 Main 函数分别存在什么问题?
#include
#include
#defineMAX_NAME_LEN20
structUSERINFO
{
intnAge;
charszName[MAX_NAME_LEN];
};
voidFillUserInfo(USERINFO*parUserInfo)
{
stu::cout<<"请输入用户的个数:";
intnCount=0;
std::cin>>nCount;
for(inti=0;i>parUserInfo[i]->nAge;
std::stringstrName;
std::cout<<"请输入姓名:";
std::cin>>strName;
strcpy(parUserInfo[i].szName,strName.c_str());
}
}
intmain(intargc,char*argv[])
{
USERINFOarUserInfos[100]={0};
FillUserInfo(arUserInfos);
printf("Thefirstnameis:");
printf(arUserInfos[0].szName);
printf("\n");
return0;
}
2.假设你在编写一个使用多线程技术的程序,当程序中止运行时,需要怎样一个机制来安全
有效的中止所有的线程?请描述其具体流程.