面试题1:赋值运算符函数
2016-06-29 15:02
344 查看
要点:
1. 判断传入参数和this是否是同一个
2. operator的参数设为常量引用,否则从形参到实参会调用赋值构造函数
3. 释放自己已有内存
4. 返回值为引用,才可以允许连续赋值
赋值运算符重载返回本类引用,形参是const引用
5. 要用strcpy,vs13用strcpy_s(m_pData, strlen(str.m_pData) + 1, str.m_Pdata)
完整代码:
View Code
1. 判断传入参数和this是否是同一个
2. operator的参数设为常量引用,否则从形参到实参会调用赋值构造函数
3. 释放自己已有内存
4. 返回值为引用,才可以允许连续赋值
赋值运算符重载返回本类引用,形参是const引用
5. 要用strcpy,vs13用strcpy_s(m_pData, strlen(str.m_pData) + 1, str.m_Pdata)
class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str); void Print(); private: char* m_pData; }; CMyString& CMyString::operator = (const CMyString& str) { if(this == &str) return *this; delete []m_pData; m_pData = NULL; m_pData = new char[strlen(str.m_pData) + 1]; strcpy(m_pData, str.m_pData); return *this; }
完整代码:
// AssignmentOperator.cpp : Defines the entry point for the console application. // // 《剑指Offer——名企面试官精讲典型编程题》代码 // 著作权所有者:何海涛 #include "stdafx.h" #include <string> class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str); void Print(); private: char* m_pData; }; CMyString::CMyString(char *pData) { if(pData == NULL) { m_pData = new char[1]; m_pData[0] = '\0'; } 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; delete []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() { 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(); printf(".\n"); } // 赋值给自己 void Test2() { 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(); 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"); } int _tmain(int argc, _TCHAR* argv[]) { Test1(); Test2(); Test3(); system("pause"); return 0; }
View Code
相关文章推荐
- 为什么程序员会是特立独行的存在?
- 互联网时代:如何成为优秀的程序员?
- 程序员必须知道的几个Git代码托管平台
- 为什么程序员会是特立独行的存在?
- 一道Integer面试题引发的对Integer的探究
- 慕课网:Web前端面试题目及答案汇总
- java面向对象面试题(1)
- 【51CTO学院三周年】一路有你
- JAVA基础面试题目
- 程序员应该知道的七个图形工具
- 黑马程序员让我结束了脑袋别在裤腰带上的生活
- "Android系统框架"-Androi的面试必问部分
- 为什么每个程序员都应该懂点前端知识?
- 各个公司面试总结
- 北风网盘点2016年中国程序员薪酬状况
- 面试问题
- 面试
- ios面试题整合4
- ios面试题整合3
- ios面试题整合2