欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:算法 【C++】運(yùn)算符重載詳解

柚子快報(bào)邀請(qǐng)碼778899分享:算法 【C++】運(yùn)算符重載詳解

http://yzkb.51969.com/

?個(gè)人主頁(yè)? ?個(gè)人專欄——C++學(xué)習(xí)? ?點(diǎn)擊關(guān)注朗一起學(xué)習(xí)C語(yǔ)言??

目錄

導(dǎo)讀

1. 為什么需要運(yùn)算符重載

2. 運(yùn)算符重載概念

3. 運(yùn)算符重載示例

3.1 == 運(yùn)算符重載

3.2 >或<運(yùn)算符

4. 運(yùn)算符重載參數(shù)

5. 全局運(yùn)算符重載函數(shù)

6. 賦值運(yùn)算符重載

6.1 語(yǔ)法及概念

6.2 示例

6.3 為何使用引用

導(dǎo)讀

前面我們學(xué)習(xí)了默認(rèn)成員函數(shù):構(gòu)造函數(shù)、析構(gòu)函數(shù)和拷貝構(gòu)造函數(shù)。

今天我們來學(xué)習(xí)賦值運(yùn)算符重載。

1. 為什么需要運(yùn)算符重載

我們一般的運(yùn)算符只能對(duì)于數(shù)字進(jìn)行運(yùn)算,或是比較大小,但是如果我們想要對(duì)我們所定義的自定義類型進(jìn)行運(yùn)算呢?

為了使自定義類型能夠支持運(yùn)算符操作,可以通過運(yùn)算符重載的方式來重新定義這些運(yùn)算符,使其能夠在自定義類型上執(zhí)行特定的操作。

比如我們定義了一個(gè)日期類,想要對(duì)這個(gè)日期類進(jìn)行加減運(yùn)算,亦或是比較兩個(gè)日期的大小,通過運(yùn)算符重載即可實(shí)現(xiàn)。

2. 運(yùn)算符重載概念

C++為了增強(qiáng)代碼的可讀性引入了運(yùn)算符重載,運(yùn)算符重載是具有特殊函數(shù)名的函數(shù),也具有其 返回值類型,函數(shù)名字以及參數(shù)列表,其返回值類型與參數(shù)列表與普通的函數(shù)類似。

函數(shù)名字為:關(guān)鍵字operator后面接需要重載的運(yùn)算符符號(hào)。

函數(shù)原型:返回值類型?operator操作符(參數(shù)列表)

一般來說需要遵循以下幾個(gè)原則:

運(yùn)算符的重載必須定義在類、結(jié)構(gòu)體或枚舉中。 運(yùn)算符重載函數(shù)必須使用特殊的命名約定,以指示要重載的運(yùn)算符。 運(yùn)算符重載函數(shù)可以是類的成員函數(shù),也可以是非成員函數(shù)。 運(yùn)算符重載函數(shù)的參數(shù)和返回值類型應(yīng)該與運(yùn)算符原有的操作數(shù)類型相匹配。 運(yùn)算符重載函數(shù)可以使用其他的運(yùn)算符或已有的函數(shù)來實(shí)現(xiàn)其操作。

3. 運(yùn)算符重載示例

3.1 == 運(yùn)算符重載

我們來判斷兩個(gè)日期是否相等:

我們需要依次比較年、月、日。

class Date

{

public:

Date(int year = 1900, int month = 1, int day = 1)

{

_year = year;

_month = month;

_day = day;

}

//operator運(yùn)算符 做函數(shù)名

bool operator == (const Date& y)

{

return _year == y._year

&& _month == y._month

&& _day == y._day;

}

private:

int _year;

int _month;

int _day;

};

int main()

{

Date d1(2024, 2, 02);

Date d2(2024, 2, 03);

cout << d1.operator == (d2) << endl;

return 0;

}

我們知道,運(yùn)算符重載也是默認(rèn)成員函數(shù)之一,也就是我們不去調(diào)用,編譯器也會(huì)自動(dòng)幫我們調(diào)用。

比如:

class Date

{

public:

Date(int year = 1900, int month = 1, int day = 1)

{

_year = year;

_month = month;

_day = day;

}

//operator運(yùn)算符 做函數(shù)名

bool operator == (const Date& y)

{

return _year == y._year

&& _month == y._month

&& _day == y._day;

}

private:

int _year;

int _month;

int _day;

};

int main()

{

Date d1(2024, 2, 3);

Date d2(2024, 2, 2);

cout << d1.operator == (d2) << endl;

cout << (d1 == d2) << endl;

return 0;

}

3.2 >或<運(yùn)算符

判斷兩個(gè)日期的大?。?/p>

class Date

{

public:

Date(int year = 1900, int month = 1, int day = 1)

{

_year = year;

_month = month;

_day = day;

}

//operator運(yùn)算符 做函數(shù)名

bool operator < (const Date& y)

{

if (_year < y._year)

{

return true;

}

else if (_year == y._year)

{

if (_month < y._month)

{

return true;

}

else if (_month == y._month)

{

return _day < y._day;

}

}

return false;

}

private:

int _year;

int _month;

int _day;

};

int main()

{

Date d1(2024, 1, 28);

Date d2(2024, 1, 29);

cout << d1.operator < (d2) << endl;

cout << (d1 < d2) << endl;

return 0;

}

4. 運(yùn)算符重載參數(shù)

上述我們的代碼明明是對(duì)兩個(gè)日期進(jìn)行比較,為何只有一個(gè)參數(shù)呢?

運(yùn)算符重載函數(shù)的參數(shù)取決于要重載的運(yùn)算符的操作數(shù)個(gè)數(shù)和類型。

一元運(yùn)算符重載:一元運(yùn)算符只有一個(gè)操作數(shù)。在重載一元運(yùn)算符時(shí),通常將其定義為類的成員函數(shù),沒有參數(shù)(除了隱式的this指針)。 二元運(yùn)算符重載:二元運(yùn)算符有兩個(gè)操作數(shù)。在重載二元運(yùn)算符時(shí),可以選擇將其定義為類的成員函數(shù)或非成員函數(shù)。

如果將二元運(yùn)算符定義為類的成員函數(shù),參數(shù)列表將包括一個(gè)額外的參數(shù),表示右側(cè)操作數(shù)。左側(cè)操作數(shù)則是隱式的this指針。 如果將二元運(yùn)算符定義為非成員函數(shù)(全局函數(shù)或友元函數(shù)),參數(shù)列表將包括兩個(gè)參數(shù),分別表示左側(cè)和右側(cè)操作數(shù)。

5. 全局運(yùn)算符重載函數(shù)

我們依舊對(duì)比兩個(gè)日期是否相等,判斷大小,注意與上述代碼的參數(shù)差異。

class Date

{

public:

Date(int year = 1900, int month = 1, int day = 1)

{

_year = year;

_month = month;

_day = day;

}

//private:

int _year;

int _month;

int _day;

};

//operator運(yùn)算符 做函數(shù)名

bool operator == (const Date& x, const Date& y)

{

return x._year == y._year

&& x._month == y._month

&& x._day == y._day;

}

bool operator < (const Date& x, const Date& y)

{

if (x._year < y._year)

{

return true;

}

else if (x._year == y._year)

{

if (x._month < y._month)

{

return true;

}

else if (x._month == y._month)

{

return x._day < y._day;

}

}

return false;

}

int main()

{

Date d1(2024, 1, 28);

Date d2(2024, 1, 29);

cout << operator == (d1, d2) << endl;

cout << operator < (d1, d2) << endl;

cout << (d1 == d2) << endl;

cout << (d1 < d2) << endl;

return 0;

}

6. 賦值運(yùn)算符重載

6.1 語(yǔ)法及概念

賦值運(yùn)算符重載是一種特殊的運(yùn)算符重載,用于在自定義的類中重載"="運(yùn)算符,使其能夠?qū)︻悓?duì)象進(jìn)行正確的賦值操作。

賦值運(yùn)算符重載的語(yǔ)法如下:

class ClassName {

public:

ClassName& operator=(const ClassName& other) {

// 執(zhí)行賦值操作的代碼

return *this;

}

};

在賦值運(yùn)算符重載函數(shù)中,通常需要執(zhí)行以下操作:

檢查是否是自我賦值,即當(dāng)前對(duì)象和要賦值的對(duì)象是否是同一個(gè)對(duì)象。如果是同一個(gè)對(duì)象,則直接返回當(dāng)前對(duì)象,避免不必要的操作。 進(jìn)行屬性的深拷貝,將要賦值的對(duì)象的屬性逐個(gè)復(fù)制給當(dāng)前對(duì)象的屬性。 返回當(dāng)前對(duì)象的引用。

6.2 示例

class Date

{

public:

Date(int year = 1900, int month = 1, int day = 1)

{

_year = year;

_month = month;

_day = day;

}

void Print()

{

cout << _year << '/' << _month << '/' << _day << endl;

}

Date& operator=(const Date& d)

{

if (this != &d)

{

_year = d._year;

_month = d._month;

_day = d._day;

}

return *this;

}

private:

int _year;

int _month;

int _day;

};

int main()

{

Date d1(2024, 2, 01);

Date d2(2024, 2, 02);

Date d3(2024, 2, 03);

d1 = d2 = d3;

d1.Print();

d2.Print();

d3.Print();

return 0;

}

6.3 為何使用引用

引用參數(shù):賦值運(yùn)算符需要修改當(dāng)前對(duì)象的值,而不是創(chuàng)建一個(gè)新的對(duì)象。因此,使用引用參數(shù),可以直接修改當(dāng)前對(duì)象而不是在函數(shù)內(nèi)部創(chuàng)建一個(gè)副本。 返回this指針:賦值運(yùn)算符一般返回當(dāng)前對(duì)象的引用,即*this。這樣可以實(shí)現(xiàn)連續(xù)賦值操作,例如 a = b = c。通過返回this指針,可以鏈?zhǔn)秸{(diào)用賦值運(yùn)算符。

柚子快報(bào)邀請(qǐng)碼778899分享:算法 【C++】運(yùn)算符重載詳解

http://yzkb.51969.com/

參考閱讀

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19221070.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄