CMyString实现
来源:互联网 发布:网络流传的父女唱的歌 编辑:程序博客网 时间:2024/04/27 20:49
有一个关于C++的面试题,我也做了一下,虽然基础,但是期间也是费了一些周折,为了理解C++的其他一些概念,我多加入了一些内容,把最终的结果放到这里。题是这样的:
类CMyString的声明如下:
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMyString& operator = (const CMyString&str);
private:
char*m_pData;
};
请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对象的状态不能改变。
在VC++ 2010中编译通过:
#include "StdAfx.h"#include <iostream>#include <string>class CMyString{public://CMyString()//{//m_pData = NULL;//};//既是默认构造函数也是初始化构造函数,所以上面的代码不需要了,否则编译错误CMyString(char* pData = NULL){cout << "Enter default/initialization constructor" << endl;m_pData = NULL;if(pData != NULL){m_pData = new char[strlen(pData)+1];strcpy(m_pData,pData);}};CMyString(const CMyString& str){cout << "Enter copy constructor" << endl;//不可能有值,一定要初始化,否则在operator=中会异常m_pData = NULL;//在Effect C++中似乎不建议这么干*this = str;};~CMyString(void){cout << "Enter destructor" << endl;if(m_pData != NULL){delete [] m_pData;}};CMyString& operator = (const CMyString& str){cout << "Enter operator=" << endl;if(this == &str)return *this;try{char * tmp = new char[strlen(str.m_pData)+1];strcpy(tmp,str.m_pData);if(m_pData != NULL)delete [] m_pData;m_pData = tmp;return *this;}catch(...){return *this;}};char * GetData(){return m_pData;}private:char* m_pData;};void PrintMyString(CMyString str){cout << str.GetData() << endl;}void main() {char * s = "hello";cout << "step 01" << endl;//初始化构造函数被调用CMyString str1(s);cout << "step 02" << endl;//拷贝构造函数被调用CMyString str2(str1);cout << "step 03" << endl;//默认构造函数被调用CMyString str3;//operator=被调用str3 = str1;cout << "step 04" << endl;//声明时初始化,拷贝构造函数被调用CMyString str4 = str1;cout << "step 05" << endl;//传值,拷贝构造函数被调用PrintMyString(str1);return;}
输出为:
step 01Enter default/initialization constructorstep 02Enter copy constructorEnter operator=step 03Enter default/initialization constructorEnter operator=step 04Enter copy constructorEnter operator=step 05Enter copy constructorEnter operator=helloEnter destructorEnter destructorEnter destructorEnter destructorEnter destructor
0 0
- CMyString实现
- CMyString的实现
- CMyString
- 更优雅的类CMyString的实现
- CMystring类实现以及返回值的理解
- 实现CMyString类--深拷贝与浅拷贝
- 异常安全的CMyString赋值运算符函数重载
- 55 题目 类 CMyString 的声明,构造函数
- 第8周-项目0-字符串类CMyString
- 微软等数据结构+算法面试100题(34)-- 类CMyString
- 如下为类型CMyString的声明,请为该类型添加赋值运算符函数
- 如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
- 题目: 如下为类型CMyString的声明,请为该类型添加赋值运算符函数.
- 2.2.1 如下为类型CMyString 的声明, 请为该类型添加赋值运算符函数
- 剑指offer面试题:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
- 实现
- 实现
- 红黑树实现 实现代码
- flex--spring框架学习--1
- hdu 2000 ASCII码排序
- 获取wifi网关和ip
- interview Note
- ParameterMap, ParameterType的误用
- CMyString实现
- ajax 入门经典实例
- QString int long char*之间的转换
- 浅析三层架构
- 手机webApp触摸左右滑动切换轮播图片广告
- STL--map用法
- POJ1860Currency Exchange spfa
- keil程序在外部RAM中调试的问题总结(个人的一点经验总结)
- HDU 4952 Number Transformation 规律题