zoukankan      html  css  js  c++  java
  • 面试题1:赋值运算符函数

    要点:

    1. 判断传入参数和this是否是同一个

    2. operator的参数设为常量引用,否则从形参到实参会调用赋值构造函数

    3. 释放自己已有内存

    4. 返回值为引用,才可以允许连续赋值

    赋值运算符重载返回本类引用,形参是const引用

    5. 要用strcpy,vs13用strcpy_s(m_pData, strlen(str.m_pData) + 1, str.m_Pdata)

     1 class CMyString
     2 {
     3 public:
     4     CMyString(char* pData = NULL);
     5     CMyString(const CMyString& str);
     6     ~CMyString(void);
     7 
     8     CMyString& operator = (const CMyString& str);
     9 
    10     void Print();
    11       
    12 private:
    13     char* m_pData;
    14 };
    15 
    16 CMyString& CMyString::operator = (const CMyString& str)
    17 {
    18     if(this == &str)
    19         return *this;
    20 
    21     delete []m_pData;
    22     m_pData = NULL;
    23 
    24     m_pData = new char[strlen(str.m_pData) + 1];
    25     strcpy(m_pData, str.m_pData);
    26 
    27     return *this;
    28 }

    完整代码:

      1 // AssignmentOperator.cpp : Defines the entry point for the console application.
      2 //
      3 
      4 // 《剑指Offer——名企面试官精讲典型编程题》代码
      5 // 著作权所有者:何海涛
      6 
      7 #include "stdafx.h"
      8 #include <string>
      9 
     10 class CMyString
     11 {
     12 public:
     13     CMyString(char* pData = NULL);
     14     CMyString(const CMyString& str);
     15     ~CMyString(void);
     16 
     17     CMyString& operator = (const CMyString& str);
     18 
     19     void Print();
     20       
     21 private:
     22     char* m_pData;
     23 };
     24 
     25 CMyString::CMyString(char *pData)
     26 {
     27     if(pData == NULL)
     28     {
     29         m_pData = new char[1];
     30         m_pData[0] = '';
     31     }
     32     else
     33     {
     34         int length = strlen(pData);
     35         m_pData = new char[length + 1];
     36         strcpy(m_pData, pData);
     37     }
     38 }
     39 
     40 CMyString::CMyString(const CMyString &str)
     41 {
     42     int length = strlen(str.m_pData);
     43     m_pData = new char[length + 1];
     44     strcpy(m_pData, str.m_pData);
     45 }
     46 
     47 CMyString::~CMyString()
     48 {
     49     delete[] m_pData;
     50 }
     51 
     52 CMyString& CMyString::operator = (const CMyString& str)
     53 {
     54     if(this == &str)
     55         return *this;
     56 
     57     delete []m_pData;
     58     m_pData = NULL;
     59 
     60     m_pData = new char[strlen(str.m_pData) + 1];
     61     strcpy(m_pData, str.m_pData);
     62 
     63     return *this;
     64 }
     65 
     66 // ====================测试代码====================
     67 void CMyString::Print()
     68 {
     69     printf("%s", m_pData);
     70 }
     71 
     72 void Test1()
     73 {
     74     printf("Test1 begins:
    ");
     75 
     76     char* text = "Hello world";
     77 
     78     CMyString str1(text);
     79     CMyString str2;
     80     str2 = str1;
     81 
     82     printf("The expected result is: %s.
    ", text);
     83 
     84     printf("The actual result is: ");
     85     str2.Print();
     86     printf(".
    ");
     87 }
     88 
     89 // 赋值给自己
     90 void Test2()
     91 {
     92     printf("Test2 begins:
    ");
     93 
     94     char* text = "Hello world";
     95 
     96     CMyString str1(text);
     97     str1 = str1;
     98 
     99     printf("The expected result is: %s.
    ", text);
    100 
    101     printf("The actual result is: ");
    102     str1.Print();
    103     printf(".
    ");
    104 }
    105 
    106 // 连续赋值
    107 void Test3()
    108 {
    109     printf("Test3 begins:
    ");
    110 
    111     char* text = "Hello world";
    112 
    113     CMyString str1(text);
    114     CMyString str2, str3;
    115     str3 = str2 = str1;
    116 
    117     printf("The expected result is: %s.
    ", text);
    118 
    119     printf("The actual result is: ");
    120     str2.Print();
    121     printf(".
    ");
    122 
    123     printf("The expected result is: %s.
    ", text);
    124 
    125     printf("The actual result is: ");
    126     str3.Print();
    127     printf(".
    ");
    128 }
    129 
    130 int _tmain(int argc, _TCHAR* argv[])
    131 {
    132     Test1();
    133     Test2();
    134     Test3();
    135     system("pause");
    136 
    137     return 0;
    138 }
    View Code
  • 相关阅读:
    模块(相当于Java里的包)
    if_else_while_for
    用户交互
    Python入门
    BigInteger类及方法应用
    selenium+java破解极验滑动验证码的示例代码
    Postman 使用详解
    Postman用法简介
    伟大架构师的秘密【转载】
    深入理解HTTP协议(转)
  • 原文地址:https://www.cnblogs.com/raichen/p/5626900.html
Copyright © 2011-2022 走看看