剑指offer:面试题1 赋值运算符函数
2015-09-07 21:36
459 查看
<pre name="code" class="cpp">//定义一个字符串类 重载赋值运算符(剑指offer:面试题一 赋值运算符函数) #include <string> class MyString { public: //在类内部声明带参构造函数 MyString(char* pData = NULL); //在类内部声明赋值构造函数 MyString(const MyString& str); //在类内部声明析构函数 ~MyString(); //重载等号运算符 即赋值函数 MyString& operator = (const MyString &str); //在类内部申明打印函数 void print(); private: char* mData; }; //在类外定义带参构造函数 MyString::MyString(char* pData) { if (pData == NULL) { mData = new char[1]; mData[0] = '\0'; } else{ int length = strlen(pData); mData = new char[length + 1]; strcpy_s(mData, strlen(pData) + 1, pData); } } //在类外定义复制构造函数 MyString::MyString(const MyString& str) { int length = strlen(str.mData); mData = new char[length + 1]; strcpy_s(mData, strlen(str.mData) + 1, str.mData); } //在类外定义析构函数 MyString::~MyString(){ delete mData; } /* //在类外定义赋值函数 MyString& MyString::operator = (const MyString& str) { if (this == &str) return *this; delete mData; mData = NULL; int length = strlen(str.mData); mData = new char[length + 1]; strcpy_s(mData, strlen(str.mData)+1,str.mData); return *this; }*/ /* 上面的赋值函数存在一些程序崩溃的隐患,书中也给出了一个解决方法: 先创建一个临时实例,再交换临时实例和原来的实例。 实现代码如下: */ MyString& MyString::operator =(const MyString &str){ if(this != &str){ MyString Tempstr(str); char* temp = Tempstr.mData; Tempstr.mData = mData; mData = temp; } return *this; } //在类外定义打印函数 void MyString::print(){ printf("%s \n",mData); } /**********************测试代码*****************/ void test1() { char* text = "hello world!"; MyString str1(text); MyString str2; //调用赋值函数 str2 = str1; str2.print(); } void test2() { char* text = "hello world!"; MyString str1(text); //调用赋值构造函数 MyString str2(str1); str2.print(); } void test3() { char* text = "hello world!"; MyString str1(text); MyString str2; MyString str3; //调用赋值函数 str3= str2 = str1; str2.print(); str3.print(); } void main() { //test1(); //test2(); test3(); }
相关文章推荐
- 一个关于if else容易迷惑的问题
- 一道sql面试题附答案
- C# 超高面试题收集整理
- C++中拷贝构造函数的应用详解
- 构造函数不能声明为虚函数的原因及分析
- C++类成员构造函数和析构函数顺序示例详细讲解
- c++基础语法:构造函数与析构函数
- JavaScript 构造函数 面相对象学习必备知识
- JavaScript面向对象设计二 构造函数模式
- Javascript面向对象编程(二) 构造函数的继承
- 人人网javascript面试题 可以提前实现下
- 成员初始化列表与构造函数体中的区别详细解析
- C#中私有构造函数的特点和用途实例解析
- C#中派生类调用基类构造函数用法分析
- C#静态构造函数用法实例分析
- javascript 静态对象和构造函数的使用和公私问题
- Javascript 使用function定义构造函数
- JavaScript中的普通函数与构造函数比较
- jQuery构造函数init参数分析续
- jquery 构造函数在表单提交过程中修改数据