面试宝典-面试题1

一、题意:对赋值操作符进行重定义,使其可以进行类对象的赋值

二、代码:

  1 #include<cstring>
  2 #include<cstdio>
  3 #include<iostream>
  4 using namespace std;
  5 
  6 class CMyString
  7 {
  8 public:
  9     CMyString(char* pData = nullptr);
 10     CMyString(const CMyString& str);
 11     ~CMyString(void);
 12 
 13     CMyString& operator = (const CMyString& str);
 14 
 15     void Print();
 16 
 17 private:
 18     char* m_pData;
 19 };
 20 
 21 CMyString::CMyString(char *pData)
 22 {
 23     if(pData == nullptr)
 24     {
 25         m_pData = new char[1];
 26         m_pData[0] = '\0';
 27     }
 28     else
 29     {
 30         int length = strlen(pData);
 31         m_pData = new char[length + 1];
 32         strcpy(m_pData, pData);
 33     }
 34 }
 35 
 36 CMyString::CMyString(const CMyString &str)
 37 {
 38     int length = strlen(str.m_pData);
 39     m_pData = new char[length + 1];
 40     strcpy(m_pData, str.m_pData);
 41 }
 42 
 43 CMyString::~CMyString()
 44 {
 45     delete[] m_pData;
 46 }
 47 
 48 CMyString& CMyString::operator = (const CMyString& str)
 49 {
 50     if(this == &str)
 51         return *this;
 52 
 53     delete []m_pData;
 54     m_pData = nullptr;
 55 
 56     m_pData = new char[strlen(str.m_pData) + 1];
 57     strcpy(m_pData, str.m_pData);
 58 
 59     return *this;
 60 }
 61 
 62 // ====================测试代码====================
 63 void CMyString::Print()
 64 {
 65     printf("%s", m_pData);
 66 }
 67 
 68 void Test1()
 69 {
 70     printf("Test1 begins:\n");
 71 
 72     char* text = "Hello world";
 73 
 74     CMyString str1(text);
 75     CMyString str2;
 76     str2 = str1;
 77 
 78     printf("The expected result is: %s.\n", text);
 79 
 80     printf("The actual result is: ");
 81     str2.Print();
 82     printf(".\n");
 83 }
 84 
 85 // 赋值给自己
 86 void Test2()
 87 {
 88     printf("Test2 begins:\n");
 89 
 90     char* text = "Hello world";
 91 
 92     CMyString str1(text);
 93     str1 = str1;
 94 
 95     printf("The expected result is: %s.\n", text);
 96 
 97     printf("The actual result is: ");
 98     str1.Print();
 99     printf(".\n");
100 }
101 
102 // 连续赋值
103 void Test3()
104 {
105     printf("Test3 begins:\n");
106 
107     char* text = "Hello world";
108 
109     CMyString str1(text);
110     CMyString str2, str3;
111     str3 = str2 = str1;
112 
113     printf("The expected result is: %s.\n", text);
114 
115     printf("The actual result is: ");
116     str2.Print();
117     printf(".\n");
118 
119     printf("The expected result is: %s.\n", text);
120 
121     printf("The actual result is: ");
122     str3.Print();
123     printf(".\n");
124 }
125 
126 int main(int argc, char* argv[])
127 {
128     Test1();
129     Test2();
130     Test3();
131 
132     return 0;
133 }
View Code

 

posted @ 2019-02-02 22:00  Run_For_Love  阅读(148)  评论(0编辑  收藏  举报