1 賦值運算子函式

2021-08-18 22:29:25 字數 2223 閱讀 1778

面試題1:如下為型別cmystring的宣告,請為該型別新增賦值運算子函式。

class cmystring ;

介紹過載賦值

【主要困惑的是,為什麼定義函式的時候使用了&,下面重點講解這個】

cmystring

&

operator=(const cmystring& str);

過載操作符是一些函式,其名字為關鍵字operator後緊跟需要過載的運算子,比如"operator="表示需要過載"="。像任何其他函式一樣,操作符函式有乙個返回值和乙個形參表。形參表必須具有與該操作符運算元數目相同的形參,但是如果操作符是乙個成員函式,它的第乙個運算元隱式繫結到this指標,因此形參表中的引數會減少乙個。因為賦值運算子必須是類的成員函式,所以this繫結到左運算元的指標。因此,賦值操作符只接受乙個形參,且該形參是同一型別的物件,右運算元一般作為const引用傳遞,跟拷貝建構函式相同。

賦值操作符的返回型別應該與內建型別賦值運算的返回型別相同,內建型別的賦值運算返回對左運算元的引用,因此賦值操作符也返回對同一類型別的引用。賦值必須返回對*this的引用,也就是左運算元的引用。

一般而言,賦值操作符與復合賦值操作符應返回左運算元的引用。

其中:this是指向本類的指標,*this就是this所指向的物件,即當前物件;另外補充一點,(*this).data與this->data是等價的。

從上述基礎知識我們知道了過載賦值操作符是乙個類的成員函式,這個函式的返回型別是左運算元的引用,也就是*this,並且這個函式的引數是乙個同型別的常引用變數。通過上述知識我們可以確定過載操作符函式為:

cmystring& operator=(const cmystring& str);//過載運算子

完整的**實現如下:

第一種解法:

#include "stdafx.h"

#include#includeusing namespace std;

void cmystring::print()

//建構函式

cmystring::cmystring(char *pdata)

else //如果建構函式的引數不為null,那麼首先求出字串長度,然後new乙個長度為len+1的字元陣列 }

//析構函式

cmystring::~cmystring()

//拷貝建構函式,拷貝建構函式與建構函式的思路非常類似。

cmystring::cmystring(const cmystring& str)

//過載運算子

cmystring& cmystring::operator=(const cmystring& str)

char* strs = "hello";

cmystring str1(strs);//呼叫了建構函式

cmystring str2;

cmystring str3(str1);//呼叫了拷貝建構函式

cmystring str4=str1;//呼叫了拷貝建構函式

str2 = str1;//呼叫了賦值運算子函式

str1.print();

str2.print();

str3.print();

str4.print();

system("pause");

第二種解法

cmystring& cmystring::operator=(const cmystring& str)

return *this;

}

注意:在編寫**的過程中,遇到了這種錯誤: 錯誤

2 error c4430: 缺少型別說明符 - 假定為 int。注意:  c++ 不支援預設 int

d:\program files\microsoft visual studio\vc\include\sal.h

2381

1 1_cmystringop

錯誤1 error c2144: 語法錯誤:「int」的前面應有「;」

d:\program files\microsoft visual studio\vc\include\sal.h

2381

1 1_cmystringop

原因:在檔案頭部多寫了乙個中文格式的':

賦值運算子函式

賦值運算子函式的 需要關注幾點 1 是否把返回值的型別宣告為該型別的引用,並在函式結束前返回例項自身的引用 即 this 只有返回乙個引用,才可以允許連續賦值。否則如果函式的返回值void,該賦值運算子將不能做連續賦值。2 是否把傳入的引數的型別宣告為常量引用。引數宣告為引用可以避免無謂的消耗,提高...

賦值運算子函式

題目 如下為型別cmystring的宣告,請為該型別新增賦值運算子函式。class cmystring 1 經典解法,初級程式設計師 cmystring cmystring operator const cmystring str 2 考慮異常安全的解法,高階程式設計師 cmystring cmys...

賦值運算子函式

型別宣告如下 class cmystring 請為上型別新增賦值運算子函式.經典解法 cmystring cmystring operator const cmystring str 考慮異常安全性解法 cmystring cmystring operator const cmystring str...