面试题1:赋值运算符函数
2015-07-31 17:27
459 查看
/* AssignmentOperator Definition Created by taotao man on 2015-7-29 brief: 题目:如下为类型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"); }
相关文章推荐
- 怎样才是理想的程序员
- 【剑指Offer面试题】 九度OJ1522:包含min函数的栈
- 黑马程序员----java基础面向对象特点及封装
- 推荐几款Web程序员好用的CSS工具
- 推荐几款Web程序员好用的CSS工具
- 怎么写出一本程序员风格的修真小说?
- 百度面试题-判断是否有环
- 黑马程序员——Java高新技术——多线程
- 黑马程序员-------集合框架之HashSet
- 黑马程序员——Java高新技术——集合
- J哥---------北京Android各招聘公司面试实战总结
- 黑马程序员--java基础概述
- 程序员如何爱护自己的眼睛
- 面试准备--操作系统篇
- 【剑指Offer面试题】 九度OJ1391:顺时针打印矩阵
- JAVA面试题集(上)
- 如何寻找最适合的职业道路?
- .net常见的面试题
- 五个方式提高程序员的日志质量
- 爱挑剔的acm程序员 acmer