2.2.1 如下为类型CMyString 的声明, 请为该类型添加赋值运算符函数

来源:互联网 发布:淘宝上门安装怎么设置 编辑:程序博客网 时间:2024/04/30 05:36
/*AssignmentOperator DefinitionCreated by taotao man on 2015-7-29brief:  题目:如下为类型CMyString 的声明, 请为该类型添加赋值运算符函数// 修改记录add SetA();change GetA();*/#include "stdafx.h"#include <string>class CMyString{public:CMyString(char *pData = NULL);CMyString(const CMyString&  str);~CMyString(void);void Print();CMyString &operator = (const CMyString &str);private:char*m_pData;};CMyString::CMyString(char *pData){if(pData == NULL){m_pData = new char[1];}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;if(this != &str)// 考虑异常安全性的解法{CMyString strTemp(str);char *pTemp = strTemp.m_pData;strTemp.m_pData = m_pData;m_pData = pTemp;}delete []m_pData;// 释放实例m_pData的内存m_pData = NULL;m_pData = new char[strlen(str.m_pData) + 1];    strcpy(m_pData, str.m_pData);return *this;}// ====================测试代码====================void CMyString::Print(){printf("%s", m_pData);}void Test1()// 把一个CMyString 的实例赋值给另外意个实例{printf("Test1 begins:\n");char *text = "Hello world";CMyString str1(text);CMyString str2;    str2 = str1;printf("The expected result is : %s.\n", text);printf("The actual result is:");str2.Print();system("pause");}void Test2()// 把一个CMyString的实例赋值给它自己{printf("Test2 begins:\n");char *text = "Hello world";CMyString str1(text);str1 = str1;printf("The expected result is : %s.\n", text);printf("The actual result is:");str1.Print();system("pause");printf(".\n");}// 连续赋值void Test3(){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");system("pause");}int _tmain(int argc, _TCHAR *argv[]){// Test1();// Test2();Test3();return 0;system("pause");}

0 0
原创粉丝点击