现在的位置: 首页 > 综合 > 正文

编写String类的构造函数、析构函数以及赋值函数(C++面试题)

2018年03月16日 ⁄ 综合 ⁄ 共 991字 ⁄ 字号 评论关闭

这是一道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、如何返回自引用

抱歉!评论已关闭.