Ch2_面试基础知识——语言面试三种类型 & 面试题1:赋值运算符函数
2014-06-26 16:39
323 查看
语言面试三种类型:
(1)直接询问应聘者对C++概念的理解。
这种类型的问题,面试官特别喜欢了解应聘者对C++关键字的理解程度。
举例:C++中有哪4个与类型转换相关的关键字(const_cast、static_cast、dynamic_cast、)
sizeof、const、static、inline、宏与inline区别等等。
sizeof关键字:
① 空的类型,sizeof(A)结果是1:本应为0,但声明类型的实例就要占用内存空间,否则无法使用。
② 添加构造和析构函数,sizeof(A)结果还是1:这些函数的地址只与类型相关,而与实例无关。
③ 把析构函数标记为虚函数,sizeof(A)结果是4(32位机)或8(64位机):
C++编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,
并在该类型的每一个实例中添加一个指向虚函数表的指针。
(2)面试官拿出事先准备的代码,让应聘者分析代码的运行结果。
很多考查C++语法的代码围绕在构造函数、析构函数以及运算符重载。
=======================================================================
面试题1:复制运算符函数
题目:如下为CMyString类型的声明,请为该类型添加赋值运算符符函数。
检查点:
① 出引用,返回引用才能连续赋值。
② 入引用,如果不是引用,则会调用一次复制构造函数,产生无谓消耗。
③ 释放内存,分配新内存前要释放实例已有内存。
④ 是否自身赋值,判断传入参数和当前实例(*this)是不是同一个实例。
本题考点:
① 考查对C++的基础语法的理解,如运算符函数、常量引用等。
② 考查对内存泄露的理解。
③ 对高级C++程序员,还要考查对代码异常安全性的理解。
整体代码:
考虑异常安全性的解法,高级程序员必备:
(1)直接询问应聘者对C++概念的理解。
这种类型的问题,面试官特别喜欢了解应聘者对C++关键字的理解程度。
举例:C++中有哪4个与类型转换相关的关键字(const_cast、static_cast、dynamic_cast、)
sizeof、const、static、inline、宏与inline区别等等。
sizeof关键字:
① 空的类型,sizeof(A)结果是1:本应为0,但声明类型的实例就要占用内存空间,否则无法使用。
② 添加构造和析构函数,sizeof(A)结果还是1:这些函数的地址只与类型相关,而与实例无关。
③ 把析构函数标记为虚函数,sizeof(A)结果是4(32位机)或8(64位机):
C++编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,
并在该类型的每一个实例中添加一个指向虚函数表的指针。
(2)面试官拿出事先准备的代码,让应聘者分析代码的运行结果。
#include <iostream> using namespace std; class A{ private: int value; public: A( int n ){ value = n; } A( A rhs ){ value = rhs.value; } // A类型的复制构造函数不能带有A类型的参数,编译错误。 void Print(){ std::cout << value << std::endl; } }; int main( void ) { A a = 10; A b = a; // 假设执行的话,初始化会调用复制构造函数,而复制构造函数自身会反复调用栈溢出。 b.Print(); return 0; }(3)要求应聘者写代码定义一个类型或者实现类型中的成员函数。(比分析代码难度高)
很多考查C++语法的代码围绕在构造函数、析构函数以及运算符重载。
=======================================================================
面试题1:复制运算符函数
题目:如下为CMyString类型的声明,请为该类型添加赋值运算符符函数。
检查点:
① 出引用,返回引用才能连续赋值。
② 入引用,如果不是引用,则会调用一次复制构造函数,产生无谓消耗。
③ 释放内存,分配新内存前要释放实例已有内存。
④ 是否自身赋值,判断传入参数和当前实例(*this)是不是同一个实例。
本题考点:
① 考查对C++的基础语法的理解,如运算符函数、常量引用等。
② 考查对内存泄露的理解。
③ 对高级C++程序员,还要考查对代码异常安全性的理解。
整体代码:
class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str); void Print(); private: char* m_pData; }; CMyString::CMyString(char *pData) { if(pData == NULL) { m_pData = new char[1]; m_pData[0] = '\0'; } else { int length = strlen(pData); m_pData = new char[length + 1]; strcpy(m_pData, pData); } } CMyString::CMyString(const CMyString &str) { int length = strlen(str.m_pData); m_pData = new char[length + 1]; strcpy(m_pData, str.m_pData); } CMyString::~CMyString() { delete[] m_pData; } CMyString& CMyString::operator = (const CMyString& str) { if(this == &str) return *this; delete []m_pData; m_pData = NULL; m_pData = new char[strlen(str.m_pData) + 1]; strcpy(m_pData, str.m_pData); return *this; }
考虑异常安全性的解法,高级程序员必备:
CMyString& CMyString::operator = ( const CMyString &str ) { if( this != &str ){ CMyString strTemp( str ); char *pTemp = strTemp.m_pData; strTemp.m_pData = this->m_pData; this->m_pData = pTemp; // 对换指针,且退出函数时自动调用析构函数。 } return *this; }
相关文章推荐
- Ch2_面试基础知识——面试题2:实现Singleton模式
- 黑马程序员——C语言基础知识整理——数据类型、常量与变量
- 黑马程序员——java基础知识篇——>标识符、关键字、常量、进制表示、数据类型、运算符等
- Java语言基础(类型提升&强制转换)
- [C++ 面试基础知识总结] 变量和基本类型
- day01<计算机基础知识&Java语言基础>
- Unity3d基础知识&面试题(重要)
- java 基础面试准备资料 & 面试题
- Java基础知识&Spring&Ajax面试题
- CG语言基础知识整理——基本数据类型
- C#中(int)、Conver.Toint32()、int.Parse()三种类型转换方式的区别与联系--C#基础知识
- Go语言基础知识总结(语法、变量、数值类型、表达式、控制结构等)
- Java基础知识强化67:基本类型包装类之Integer直接赋值的面试题
- C语言基础知识总结(1)-基本数据类型
- javaSE_8系列博客——Java语言的特性(二)--高级语言的基础知识(2)-- 变量和常用数据类型
- 【基础语言学习】C#中的可空类型运算(Nullable<T>)------T?
- Javascript 基础知识 - 数据类型 & 变量
- Java基础知识强化23:Java中数据类型转换(面试题)
- C语言基础知识【数据类型】
- 《Linux C编程实战》中一些基础C语言知识 && 一些笔试面试题总结