这是一道C++面试题:用C++编写一个String类,实现其构造函数、析构函数以及赋值函数
#ifndef STRING_H #define STRING_H #include <string.h> class String { public: String(); String(const char* pStr=NULL) ; String(const String & str) ; char *GetData() const; int Length() const ; String &operator =(const String &) ; virtual ~String(); protected: private: char* m_pData ; }; #endif // STRING_H #include "String.h" String::String() { m_pData=new char[1] ; m_pData[0]='\0' ; } String::String(const char* pStr) { if(pStr==NULL) { m_pData=new char[1] ; m_pData[0]='\0' ; }else { m_pData=new char[strlen(pStr)+1] ; strcpy(m_pData,pStr) ; } } String::String(const String &str) { m_pData=new char[str.Length()+1] ; strcpy(m_pData,str.GetData()) ; } int String::Length() const { return strlen(m_pData) ; } char *String::GetData() const { return m_pData ; } String &String::operator=(const String &str) { if(this==&str) { return *this ; } delete[] m_pData ; m_pData=new char[strlen(str.GetData())+1] ; strcpy(m_pData,str.GetData()) ; return *this ; } String::~String() { delete[] m_pData ; }
剖析:这道面试题考查了一下几个方面的知识:
1、C++成员函数默认参数的使用;
2、const关键字的用法
3、如何重载操作符
4、如何进行自赋值检查
5、如何返回自引用