• 面试宝典-面试题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] = '';
     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:
    ");
     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.
    ", text);
     79 
     80     printf("The actual result is: ");
     81     str2.Print();
     82     printf(".
    ");
     83 }
     84 
     85 // 赋值给自己
     86 void Test2()
     87 {
     88     printf("Test2 begins:
    ");
     89 
     90     char* text = "Hello world";
     91 
     92     CMyString str1(text);
     93     str1 = str1;
     94 
     95     printf("The expected result is: %s.
    ", text);
     96 
     97     printf("The actual result is: ");
     98     str1.Print();
     99     printf(".
    ");
    100 }
    101 
    102 // 连续赋值
    103 void Test3()
    104 {
    105     printf("Test3 begins:
    ");
    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.
    ", text);
    114 
    115     printf("The actual result is: ");
    116     str2.Print();
    117     printf(".
    ");
    118 
    119     printf("The expected result is: %s.
    ", text);
    120 
    121     printf("The actual result is: ");
    122     str3.Print();
    123     printf(".
    ");
    124 }
    125 
    126 int main(int argc, char* argv[])
    127 {
    128     Test1();
    129     Test2();
    130     Test3();
    131 
    132     return 0;
    133 }
    View Code
  • 相关阅读:
    第12组 Beta冲刺 (4/5)
    第12组 Beta冲刺 (3/5)
    代码用辅助多了 基础的读取config都忘记了
    wpf 动态添加控件 通过xmal实习 c#代码插入控件
    C#里调用非托管的Dll -z注意 net版本
    动态调用 类库
    c#时间的生成
    c# 第三方 修改版本号 MSBuildTasks, 解决 通配符不匹配问题
    c#.exe以管理员身份运行
    log4
  • 原文地址:https://www.cnblogs.com/acm-jing/p/10349288.html
Copyright © 2020-2023  润新知