剑指offer面试题1-10

剑指offer

面试题1:赋值运算符函数、

为如下CMyString类型添加赋值运算符函数

#include 
#include 
//为下列函数添加赋值运算符函数
class CMyString {
public:
    CMyString(char *pData = nullptr);

    CMyString(const CMyString &str);

    CMyString operator=(const CMyString &str);

    void Print();

    ~CMyString(void);

private:
    char *m_pData;
};

CMyString::CMyString(char *pData) {
    if (pData == nullptr) {
        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 = nullptr;

    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)
//    {
//        //先创建一个str的实例
//        CMyString strTemp(str);
//
//        char *pTemp=strTemp.m_pData;
//        strTemp.m_pData=m_pData;
//        m_pData=pTemp;
//    }
//    return *this;
//}

void CMyString::Print() {
    printf("%s",m_pData);
}

void Test16_1()
{
    printf("Test1 begin:\n");

    char *text="Hello world";
    CMyString str1(text);
    CMyString str2;
    str2=str1;

    printf("The expected resultis: %s.\n",text);
    printf("The actual resultis: ");
    str2.Print();
    printf(".\n");
}

void Test16_2()
{
    printf("Test2 begin:\n");

    char *text="Hello world";
    CMyString str1(text);
//    CMyString str2;
    str1=str1;

    printf("The expected resultis: %s.\n",text);
    printf("The actual resultis: ");
    str1.Print();
    printf(".\n");
}

// 连续赋值
void Test16_3()
{
    printf("Test3 begins:\n");

    char* text = "Hello world";

    CMyString str1(text);
    CMyString str2, str3;
    str3 = str2 = str1;

    printf("The expected result is: %s.\n", text);

    printf("The actual result is: ");
    str2.Print();
    printf(".\n");

    printf("The expected result is: %s.\n", text);

    printf("The actual result is: ");
    str3.Print();
    printf(".\n");
}

int main(int argc, char* argv[])
{
    Test16_1();
    Test16_2();
    Test16_3();

    return 0;
}

运行结果:
剑指offer面试题1-10_第1张图片

面试题2:实现singleton模式

你可能感兴趣的:(剑指offer,c++)