下面的程序是否有错误,如果有错,请说明原因。char*constpszHelp=“hello”;pszHelp[0]=‘a’;因为pszHelp指向一个常量字符串,所以根本不允许修改字符串内容。除非使用一个字符数组。const用法:constchar*p p是一字符串指针,该指针指向的内容是常量,指针指向的内容不能被修改charconst*p 同上char*constp p是一字符串指针,该指针是常量指针,指针不能被修改什么是抽象类包含抽象函数的类是抽象类,满足virtualfun()=0;的语法的函数是抽象函数。主要用于提供接口,如同Java中的Interface。什么时候需要使用虚拟析构函数一般情况下类的析构函数都定义成虚函数,主要是考虑在使用基类指针操作派生类对象时保证类的析构顺序。{ int*m_pCount;public: voidclear(){if(m_pCount)deletem_pCount;} CC(){m_pCount=newint;} ~CC(){clear();}}主要存在的问题是clear函数在deletem_pCount;后并没有置指针为空(m_pCount=NULL),这样当第二次调用clear时,会出现问题。如何定义禁止实例化的纯抽象基类这个问题很奇怪,抽象类本身就不能被实例化,在程序编译时就会提示出错。在进行私有继承时,如何修改基类成员的存取权限定义一个指向该基类的友元函数,就可以绕过私有继承操作基类成员。::*bfpClear)()=&CC::clear;类A派生类B和C,类D从类B、C派生,如何将一个类A的指针指向一个类D的指针直接使用即可,主要是考察运行时多态的概念。本题和题4要一起考虑。请说出程序运行的结果classA{public: virtualvoidfunc(){cout<<“Iaminbase”<<endl;};}classB:publicA{ public: virtualvoidfunc(){cout<<“Iaminderived”<<endl;}}voidmain(){ B*bb=newB; bb->func(); A*aa=(A*)bb; aa->func(); ….} Iaminderived Iaminderived 主要考察虚函数的使用分析下面代码,指出问题int*func(){inti=0;return&i;} 返回的是一个局部简单类型变量地址,程序可能会出错,而且返回的指针不能采用delete进行删除。classCObject;CObject*funobj(){CObjectobj;….return&obj;} 返回的是一个局部CObject类型变量地址,程序会出错,而且返回的指针不能采用delete进行删除。CStringfunobj(){CStringstrTemp=_T(“temp”);returnstrTemp;} 不会出错,返回的CString会调用CString的拷贝构造函数返回。Debug版本中经常使用ASSERT进行断言,在Release版本中有一个起同样作用的函数,请说明。VERIFY,而且要注意ASSERT中的语句在Release版本中会忽略。标准建模语言UML的重要内容可以由哪五类图(共9种图形)来定义,并简要说明这些图所描述的对象。什么是虚拟函数、虚拟继承?你在使用面向对象程序设计语言(例如C++,Java等)和可重用的对象类库上有何经验?实际效果如何?有什么优缺点?引用和指针之间有什么区别?什么是函数重载?C++与其它传统编程语言相比有何特点?简要说明如何绘制UML活动图。为什么有些类成员函数在类声明中定义而有一些则不是呢?对象分析和设计的阶段有哪些?为什么要费力地生成抽象数据类型――为什么不把它设为非抽象的数据类型和避免创建这种类型的对象呢?什么是多态性?多态性是如何实现的?查错:下面这段代码有什么错误?classShape(){public:Shape();virtual~Shape();virtualShape(constShape&);}13、查错:下面的代码有什么错?intmain(){ intSomeVariable=5; count<<”SomeVariable:”<<SomeVariable<<”\n;” int*pVar=&SomeVariable; pVar=9; count<<”SomeVariable:”<<*pVar<<”\n”; return0;}14、查错:下面的程序有什么错误?并修改。#include<>int*FuncOne();intmain(){int*pint=FuncOne;cout<<”thevalueofpIntbackinmainis:”<<*pint<<end1
C 面试题归纳 来自淘豆网m.daumloan.com转载请标明出处.