常见笔试面试题目一位同学整理的常见笔试/ 面试题目,答案仅供参考,不代表本人观点。这个东西有些参考价值, 和同学讨论一下发现还是有些错误, 1 .已知 strcpy 函数的原型是: char *strcpy(char *strDest, const char *strSrc); 其中 strDest 是目的字符串, strSrc 是源字符串。不调用 C++/C 的字符串库函数,请编写函数 strcpy 答案: char *strcpy(char *strDest, const char *strSrc) { if( strDest == NULL || strSrc == NULL) return NULL ; if( strDest == strSrc) return strDest ; char *tempptr = strDest ; while( (*strDest++ = *strSrc++) != ‘’) ; return tempptr ;}2 .已知类 String 的原型为: class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数~ String(void); // 析构函数 String & operate =(const String &other); // 赋值函数 private: char *m_data; // 用于保存字符串}; 请编写 String 的上述 4 个函数。答案: String::String(const char *str) { if( str == NULL ) //strlen 在参数为 NULL 时会抛异常才会有这步判断{ m_data = new char[1] ; m_data[0] = '';} else { m_data = new char[strlen(str) + 1]; strcpy(m_data,str); }} String::String(const String &other) { m_data = new char[strlen() + 1]; strcpy(m_data,); } String & String::operator =(const String &other) { if( this == &other) return *this ; delete []m_data; m_data = new char[strlen() + 1]; strcpy(m_data,); return *this ; } String::~ String(void) { delete []m_data ;} 3. 简答 头文件中的 ifndef/define/endif 干什么用? 答:防止该头文件被重复引用。 #i nclude <> 和# i nclude “ ”有什么区别? 答:对于# i nclude <> ,编译器从标准库路径开始搜索 对于# i nclude “ ”,编译器从用户的工作路径开始搜索 在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? 答: C++ 语言支持函数重载, C 语言不支持函数重载。函数被 C++ 编译后在库中的名字与 C 语言的不同。假设某个函数的原型为: void foo(int x, int y); 该函数被 C 编译器编译后在库中的名字为_foo ,而 C++ 编译器则会产生像_foo_int_int 之类的名字。 C++ 提供了 C 连接交换指定符号 extern “C”来解决名字匹配问题。 一个类有基类、内部有一个其他类的成员对象, 构造函数的执行顺序是怎样的。( Autodesk ) 答:先执行基类的(如果基类当中有虚基类,要先执行虚基类的,其他基类则按照声明派生类时的顺序依次执行) ,再执行成员对象的, 最后执行自己的。 请描述一个你熟悉的设计模式(Autodesk) 在 UML 中,聚合(aggregation) 和组合(composition) 有什么区别 Autodesk) 答案: 聚合关系更强, 类似于 pages 和 book 的关系; 组合关系要弱, 类似于 books 和 bookshelf 的关系。 # 和 C++ 除了语法上的差
常见笔试面试题目 来自淘豆网www.taodocs.com转载请标明出处.