日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(剑指Offer)面试题1:赋值运算符函数

發布時間:2025/4/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (剑指Offer)面试题1:赋值运算符函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:

如下為類型CMyString的聲明,請為該類型添加賦值運算符函數。

class CMyString{
public:
??? CMyString(char* pData=NULL);
??? CMyString(const CMyString& str);
??? CMyString& operator=(const CMyString& str);
??? ~CMyString(void);

private:
??? char *m_pdata;
};

?

思路:

賦值運算符函數,注意四點:

1、是否將返回值的類型聲明為該類型的引用,并在函數結束前返回實例自身的引用,即*this。只有返回一個引用,才可以允許連續賦值。

2、是否把傳入參數的類型聲明為常量引用。如果傳入的參數不是引用而是實例,那么從形參到實參會調用一次復制構造函數,把參數聲明為引用可以避免這樣的無謂消耗,能提高代碼的效率。同時,在賦值運算符函數中不會改變傳入的實例的狀態,因此應該為傳入的引用參數加上const關鍵字。

3、是否釋放實例自身已有的內存,如果忘記在分配新內存之前釋放自身已有的空間,程序將出現內存泄露。

4、是否判斷傳入的參數和當前實例*this是不是同一個實例。如果是同一個,則不進行賦值操作,直接返回。

5、注意淺拷貝和深拷貝

更多考慮:異常安全性等。

代碼:

?

#include <iostream> #include <string.h>using namespace std;class CMyString{ public:CMyString(const char* pData=NULL);CMyString(const CMyString& str);CMyString& operator=(const CMyString& str);char* getData(){return this->m_pdata;};~CMyString(void);private:char *m_pdata; };/* // shallow copy CMyString::CMyString(char* pData){m_pdata=pData; }CMyString::CMyString(const CMyString& str){*this=str; } */// deep copy CMyString::CMyString(const char* str){if(str==NULL){m_pdata=new char[1];m_pdata[0]='\0';}else{m_pdata=new char[strlen(str)+1];strcpy(m_pdata,str);} }CMyString::CMyString(const CMyString &str){m_pdata=new char[strlen(str.m_pdata)+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; }int main() {char a[]="hello";CMyString str(a);CMyString str1(str);CMyString str2;CMyString str3;str3=str2=str;cout << str.getData()<< endl;cout << str1.getData()<< endl;cout << str2.getData()<< endl;cout << str3.getData()<< endl;return 0; }

運行結果:

轉載于:https://www.cnblogs.com/AndyJee/p/4486043.html

總結

以上是生活随笔為你收集整理的(剑指Offer)面试题1:赋值运算符函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。