1、 CSub obj;A. constructing CSub class B. constructing CBase class constructing CBase class constructing CSub class destructing CSub class destructing CBase class destructing CBase class destructing CSub classC. constructing CBase class constructing CSub class destructing CSub class destructing CBase
2、class D. constructing CSub class constructing CBase class destructing CBase class destructing CSub class4.在一个cpp文件里面,定义了一个static类型的全局变量,下面一个正确的描述是:A.只能在该cpp所在的编译模块中使用该变量B.该变量的值是不可改变的C.该变量不能在类的成员函数中引用D.这种变量只能是基本类型(如int,char)不能是C+类型5.观察下面一段代码:class ClassAvirtual ClassA();virtual void FunctionA();class
3、 ClassB virtual void FunctionB(); class ClassC : public ClassA,public ClassBClassC aObject;ClassA* pA=&aObject;ClassB* pB=&ClassC* pC=&关于pA,pB,pC的取值,下面的描述中正确的是:A.pA,pB,pC的取值相同. B.pC=pA+pBC.pA和pB不相同 D.pC不等于pA也不等于pB6.参照1.5的代码,假设定义了ClassA* pA2,下面正确的代码是:A.pA2=static_cast(pB);B.void* pVoid=static_cast pA
4、2=static_cast(pVoid);C.pA2=pB;D.pA2=static_cast(static_cast(pB);7.参照1.5的代码,下面那一个语句是不安全的: A.delete pA B.delete pB C.delete pC8.下列程序的运行结果为:int a=2;int b=+a;couta/6 A.0.5 B.0 C0.7 D.0.66666669.有如下一段代码:#define ADD(x,y) x+yint m=3;m+=m*ADD(m,m);则m的值为: A.15 B.12 C.18 D.5810.如下是一个带权的图,图中结点A到结点D的关键路径的长度是:A.
5、13 B.15 C.28 D.5811.下面的模板声明中,正确的是:A.templateB.templateC.templateD.template12.在Windows编程中下面的说法正确的是:A.两个窗口,他们的窗口句柄可以是相同的 B.两个窗口,他们的处理函数可以是相同的C.两个窗口,他们的窗口句柄和窗口处理函数都不可以相同.13.下面哪种情况下,B不能隐式转换为A?A.class B:public A B.class A:public BC.class Boperator A(); D.class AA(const B&);14.某公司使用包过滤防火墙控制进出公司局域网的数据,在不考虑
6、使用代理服务器的情况下,下面描述错误的是”该防火墙能够( )”.A.使公司员工只能访问Internet上与其业务联系的公司的IP地址.B.仅允许HTTP协议通过,不允许其他协议通过,例如TCP/UDP.C.使员工不能直接访问FTP服务器端口号为21的FTP地址.D.仅允许公司中具有某些特定IP地址的计算机可以访问外部网络15.数字字符0的ASCII值为48,若有以下程序:main() char a=1,b=2;printf(“%c,”,b+);printf(“%dn”,b-a);程序运行之后的输出结果是:A.3,2 B.50,2 C.2,2 D.2,50二. 填空题(共40分)本程序从正文文件
7、text.in读入一篇英文短文,统计该短文中不同单词和它的出现次数,并按词典编辑顺序将单词及它的出现次数输出到正文文件word.out中.程序用一棵有序二叉树存储这些单词及其出现的次数,一边读入一边建立.然后中序遍历该二叉树,将遍历经过的二叉树上的节点的内容输出.程序中的外部函数int getword(FILE* pFile,char* pszWordBuffer,int nBufferLen);从与pFile所对应的文件中读取单词置入pszWordBuffer,并返回1;若单词遇文件尾,已无单词可读时,则返回0.#include malloc.hctype.hstring.h#define
8、SOURCE_FILE text.in#define OUTPUT_FILE word.out#define MAX_WORD_LEN 128typedef struct treenode char szWordMAX_WORD_LEN; int nCount; struct treenode* pLeft; struct treenode* pRight;BNODE;int getword(FILE* pFile,char* pasWordBuffer,int nBufferLen);void binary_tree(BNODE* ppNode,char* pszWord) if(ppNod
9、e != NULL & pszWord != NULL) BNODE* pCurrentNode = NULL; BNODE* pMemoNode = NULL; int nStrCmpRes=0; _(1)_;pCurrentNode=*ppNode while(pCurrentNode) /*寻找插入位置*/ nStrCmpRes = strcmp(pszWord, _(2)_ );pCurrentNode-nCount if(!nStrCmpRes) _(3)_; pCurrentNode-nCount+ return; else _(4)_; pMemoNode=pCurrentNod
10、e pCurrentNode = nStrCmpRes0?pRight :pLeft; pCurrent=new BNODE; if(pCurrentNode ! memset(pCurrentNode,0,sizeof(BNODE); strncpy(pCurrentNode-szWord,pszWord,MAX_WORD_LEN-1);nCount=1; if(pMemoNode=NULL) _(5)_; *ppNode= pCurrentNode else if(nStrCmpRes0) pMemoNode-pRight=pCurrentNode;pLeft=pCurrentNode;v
11、oid midorder(FILE* pFile,BNODE* pNode) if(_(6)_) return;!pNode|!pFile midorder(pFile,pNode-pLeft); fprintf(pFile,%s %dn,pNode-szWord,pNode-nCount);pRight); FILE* pFile=NULL; BNODE* pRootNode=NULL; char szWordMAX_WORD_LEN=0; pFile=fopen(SOURCE_FILE,r if(pFile=NULL) printf(Cant open file %sn,SOURCE_FI
12、LE); while(getword(pFile,szWord,MAX_WORD_LEN)=1) binary_tree(_(7)_);/ pRootNode,szWord fclose(pFile); pFile=fopen(OUTPUT_FILE,w midorder(pFile,pRootNode);三. 附加题(每题30分,2题,共60分)1. 从程序健壮性进行分析,下面的FillUserInfo函数和Main函数分别存在什么问题?iostreamstring#define MAX_NAME_LEN 20struct USERINFO int nAge; char szNameMAX_
13、NAME_LEN;void FillUserInfo(USERINFO* parUserInfo) stu:请输入用户的个数:; int nCount=0; std:cinnCount; for(int i=0;inAge;string strName;请输入姓名:strName; strcpy(parUserInfoi.szName,strName.c_str();int main(int argc,char* argv) USERINFO arUserInfos100=0; FillUserInfo(arUserInfos);The first name is: printf(arUser
14、Infos0.szName);n return 0;2. 假设你在编写一个使用多线程技术的程序,当程序中止运行时,需要怎样一个机制来安全有效的中止所有的线程?请描述其具体流程.本文来自CSDN博客,转载请标明出处:struct CLS int m_i; CLS( int i ) : m_i(i) CLS( ) CLS(0);void main( void )CLS obj1; / 调用无参数构造函数,再调用CLS(0)?CLS obj2(1);cout obj1.m_i endl;/-858993460 obj2.m_i a = a;b = b; CTest(int a) new(this)
15、CTest(a,5);int main(int argc, char* argv) CTest obj(1); cout a is obj.a b is obj.b CTest:CTest() /new(this) CTest(a,5);CTest(a,5);这种情况下,第二个有参构造函数就是在第一个构造函数的基础上进行初始化。若构造函数调用自身,则会出现无限递归调用,将会发生堆栈溢出。First-chance exception in ThinkingInCPlusPlus.exe: 0xC00000FD: Stack Overflow.从这里,我们归纳如下:1)在c+里,由于构造函数允许有默认参数,使得这种构造函数调用构造函数来重用代码的需求大为减少。因此应尽量避免这样使用,适用不当会带来意想不到的问题2)如果仅仅为了一个构造函数重用另一个构造函数的代码,那么完全可以把构造函数中的公共部分抽取出来定义一个成员函数(推荐为private),然后在每个需要这个代码的构造函数中调用该函数即可3)偶尔我们还是希望在类的构造函数里调用另一个构造函数,关键是让第二个构造函数在第一次分配好的内存上执行,而不是分配新的内存,这个可以用标准库的placement new或者明确通过第一个对象的this指针来调用第二个构造函数,此时相当于普通的函数调用。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1