2015.5.28 面试题1:赋值运算符函数
生活随笔
收集整理的這篇文章主要介紹了
2015.5.28 面试题1:赋值运算符函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從昨天開始,我希望自己能夠每天堅持下來。每天一道面試題,每天都有成長。距離找工作的日子越來越近,珍惜現在的學生生活。希望我能堅持下來,好好地努力,找到一個理想的工作。其實,一直在猶豫到底使用哪種語言去做這些題目,現在終于想通了,C++是個不錯的選擇。堅持努力下去吧!參考了一些網上的代碼,自己對照著學習了下。
代碼:
#include <iostream> #include <stdlib.h> using namespace std;class CMyString { public:CMyString( char* pData = NULL); //構造函數CMyString( const CMyString& str); //拷貝構造函數~CMyString( void ); //析構函數CMyString& CMyString::operator = (const CMyString &str); //重載賦值運算符void CMyString::print(); //打印字符串private:char* m_pData; //數據域,字符指針 };//打印字符串 void CMyString::print() {cout<< m_pData <<endl; }//構造函數CMyString::CMyString(char* pData) {if(pData == NULL){m_pData = new char[1];m_pData[0]='\0';}else{int len = strlen(pData);m_pData = new char[len+1];strcpy(m_pData, pData);} }//拷貝構造函數 CMyString::CMyString(const CMyString& str) {int len = strlen(str.m_pData);m_pData = new char[len+1];strcpy(m_pData, str.m_pData); }//析構函數 CMyString::~CMyString(void) {delete[] m_pData; }//重載運算符 CMyString& CMyString::operator=(const CMyString &str) {/** 解法一:這種解法沒有考慮到如果刪掉m_pData后,new char時內存不足的問題//如果傳入的參數與當前的實例是同一個實例,則直接返回自身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);**//**比較好的解法二:先new成功后再delete if(this != &str){char* temp = new char[strlen(str.m_pData)+1];delete[] m_pData;strcpy(m_pData, str.m_pData);}return *this;**//**更好的解法三 先創建一個臨時實例,再交換臨時實例和原來的實例**/if( this != &str){//先創建一個臨時實例CMyString temp(str);//臨時變量(相當于變量交換時臨時變量)char* pTemp = temp.m_pData; //(1)把臨時實例中的數放到一個新生成的臨時變量中去;temp.m_pData = m_pData; //(2)把當前實例的數放到臨時實例中去了。m_pData = pTemp; // (3)把臨時變量的數再賦給當前實例,從而完成當前實例與臨時實例的交換}return *this;}int main() {char* test = "hello world!";CMyString str1(test);CMyString str2;str2 = str1;str1.print();str2.print();cout<<"---------------------------"<<endl;char* test2 = "zbhzbn";CMyString str3(test2);str3 = str3;str3.print();str3.print();system("pause");return 0;}?
轉載于:https://www.cnblogs.com/zbhzbn/p/4537036.html
總結
以上是生活随笔為你收集整理的2015.5.28 面试题1:赋值运算符函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 配置错误:未能使用提供程序“RsaPro
- 下一篇: hdu 1047 Integer Inq