中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

鄭州漢獅做網(wǎng)站多少錢谷歌seo網(wǎng)站運營

鄭州漢獅做網(wǎng)站多少錢,谷歌seo網(wǎng)站運營,駐馬店行業(yè)網(wǎng)站建設(shè)源碼,十大免費繪圖軟件前言: 在上文我們知道數(shù)據(jù)類型分為自定義類型和內(nèi)置類型,當(dāng)我想用內(nèi)置類型比較大小是非常容易的但是在C中成員變量都是在類(自定義類型)里面的,那我想給類比較大小那該怎么辦呢?這時候運算符重載就出現(xiàn)了 一 運算符重載概念&…

前言:

在上文我們知道數(shù)據(jù)類型分為自定義類型和內(nèi)置類型,當(dāng)我想用內(nèi)置類型比較大小是非常容易的但是在C++中成員變量都是在類(自定義類型)里面的,那我想給類比較大小那該怎么辦呢?這時候運算符重載就出現(xiàn)了

一 運算符重載概念:

允許用戶為自定義類定義或重新定義運算符的行為,使這些類在使用運算符時表現(xiàn)得像內(nèi)置數(shù)據(jù)類型一樣,從而提高代碼的可讀性和簡潔性。

1.2 運算符重載與函數(shù)重載的區(qū)別:

我第一次聽到這兩個重載都傻傻的分不清楚,以為是一個意思。其實他們的區(qū)別可大了

函數(shù)重載:

函數(shù)重載是指在同一作用域中有多個同名函數(shù),但它們的參數(shù)列表(參數(shù)的類型和數(shù)量)不同。編譯器通過參數(shù)列表來決定調(diào)用哪個函數(shù)。函數(shù)重載的目的是為了提高代碼的可讀性和靈活性,使同一操作可以應(yīng)用于不同類型的參數(shù)。

運算符重載:

運算符重載允許我們?yōu)橛脩舳x的類型(如類)定義或重新定義特定運算符(如 +、-、*、/ 等)的行為。運算符重載函數(shù)的名稱為 operator 后跟運算符符號。盡管這些函數(shù)的返回類型和參數(shù)列表與普通函數(shù)類似,但它們的目的是使自定義類型能夠使用像內(nèi)置類型一樣的運算符。

1.3?運算符特點:

1 定義運算符重載函數(shù):運算符重載是通過定義特殊的成員函數(shù)全局函數(shù)來實現(xiàn)的

2 運算符重載函數(shù)的返回類型:通常是運算符操作后的結(jié)果類型。

3 運算符重載函數(shù)的參數(shù):根據(jù)運算符的類型,參數(shù)可以是一個或多個。

4??*?::?sizeof??:?.?注意以上5個運算符不能重載

3.1 代碼解析:

運算符重載成員函數(shù)代碼示例:

//成員函數(shù) 運算符重載
class Date 
{
public:int _x = 5;int _y = 4;int operator+(const Date& b){return this->_x + b._x + this->_y + b._y;}//錯誤寫法//int operator+(const Date& a , const Date& b)/*{return a.x + b.x + a.y + b.y;}*/
};
int main()
{//成員函數(shù) 運算符重載Date d1;Date d2;int sum = d1 + d2;std::cout << "d1 d2總和:" << sum << std::endl;return 0;
}

錯誤寫法分析:

因為它是Date類里面的成員函數(shù) 又因為成員函數(shù)會自帶一個隱含的this指針所以成員函數(shù)版本的 operator+ 只能有一個顯式參數(shù)。如果需要兩個參數(shù),則應(yīng)使用全局函數(shù)版本的運算符重載。

//全局函數(shù) 運算符重載
class Point
{
public://默認構(gòu)造函數(shù)Point(){this->_x = 5;this->_y = 15;}
//private:int _x;int _y;
};
bool operator==(const Point& b, const Point& a)
{return (b._x == a._x) && (b._y == a._y);
}int main()
{Point f1;Point f2;int B = f1 == f2;std::cout << "1相同 0相否:" << B << std::endl;return 0;
}

全局函數(shù)的運算符重載是在類外部實現(xiàn)的,不屬于任何類,因此沒有 this 指針。全局函數(shù)可以通過參數(shù)訪問所有操作數(shù)。

假如我把成員函數(shù)變成私有的話那在全局函數(shù)里面就找不到他們了所以想改變就只能把運算符變量改為成員函數(shù)或者用友元函數(shù)或getter方法。

二 賦值運算符重載概念:

賦值運算符重載用于定義對象之間的賦值操作,即如何將一個對象的值賦給另一個對象。賦值運算符是 =,它在賦值時被調(diào)用。通常我們需要重載賦值運算符來處理深拷貝,以防止淺拷貝帶來的問題。

2.1 賦值運算符重載和拷貝構(gòu)造的區(qū)別:

通過賦值運算符重載的概念我們知道它主要的功能是將一個對象的值賦給另一個對象,而這和拷貝構(gòu)造又非常相似,然而賦值運算符重載與運算符重載只有兩字相差卻又是不同的內(nèi)容,這就讓我很想知道他們之間的區(qū)別到底是什么,接下來讓我們一起來解密吧!

概念:

1. 賦值運算符重載

定義對象之間的賦值操作,即如何將一個對象的值賦給另一個對象。

2. 運算符重載:

定義或重新定義自定義類型的運算符行為,使其與內(nèi)置類型的運算符行為一致。

3. 拷貝構(gòu)造:

創(chuàng)建一個新的對象,并將其初始化為現(xiàn)有對象的副本。

區(qū)別:

拷貝構(gòu)造函數(shù)和賦值運算符重載的主要區(qū)別在于它們的使用場景和目的??截悩?gòu)造函數(shù)在對象創(chuàng)建時用于初始化新對象,目的是創(chuàng)建一個新的副本。賦值運算符重載在對象已存在時用于賦值操作,目的是修改現(xiàn)有對象的狀態(tài),使其與另一個對象的狀態(tài)相同??截悩?gòu)造函數(shù)通常接收一個對同類對象的常引用,而賦值運算符重載通常返回對象的引用,并接收一個對同類對象的常引用作為參數(shù)。而運算符重載和賦值運算符重載也真是差了兩個字而已,并沒有什么區(qū)別。

2.1.0 代碼解析:

//賦值運算符重載
class Date1
{
public://默認構(gòu)造函數(shù)Date1(int year = 2005, int month = 5, int date = 25){this->_year = year;this->_month = month;this->_date = date;}//拷貝構(gòu)造函數(shù)Date1(const Date1& other){this->_year = other._year;this->_month = other._month;this->_date= other._date;}//賦值運算符重載Date1 operator=(const Date1& d){this->_year = d._year;this->_month = d._month;this->_date = d._date;return *this;}//輸出void print(){std::cout << _year << "-" << _month << "-" << _date << std::endl;}private:int _year;int _month;int _date;
};int main()
{//構(gòu)造函數(shù)Date1 q1(2024 , 7 , 12);Date1 q2(2021 , 6 , 26);//拷貝構(gòu)造Date1 q3(q2);//賦值運算符重載Date1 q4;q4 = q1;//輸出q1.print();q2.print();q3.print();q4.print();return 0;
}

從上面代碼可以知道q3是在被創(chuàng)建的時候就直接被調(diào)用拷貝構(gòu)造初始化而q4是先定義好之后在被調(diào)用賦值運算符重載初始化的。

那既然賦值運算符重載就是對象之間的賦值那和C語言中的賦值整體意思還是一樣的但就是賦值的對象變了,我不知道大家是否還記得在C語言中可以連續(xù)賦值,讓我們來試試在C++中的賦值運算符重載是否也可以實現(xiàn)呢?

#include <iostream>
class Date 
{
public:int _year, _month, _day;Date(int year = 2005, int month = 5, int day = 25){this->_year = year;this->_month = month;this->_day = day;}// 賦值運算符重載Date& operator=(const Date& d) {// 自賦值檢查if (this != &d) { _year = d._year;_month = d._month;_day = d._day;}return *this;   // 返回當(dāng)前對象的引用}void Print(){std::cout << _year << "-" << _month << "-" << _day << std::endl;}
};int main() {Date d1(2023, 7, 10);Date d2;Date d3;// 鏈式賦值d3 = d2 = d1;d1.Print();  d2.Print(); d3.Print(); return 0;
}

輸出:

雖然輸出的結(jié)果確實是鏈式但是又有非常多的疑惑比如為什么要傳*this 還有執(zhí)行順序是什么……

讓我們詳細的來解答一下:

首先d2傳給隱函數(shù)this指針然后d1傳給?Date& d那這時d1就是d的引用了,執(zhí)行到下面就是判斷成員變量的地址是否相同(最開始它們之間的地址還是不一樣的)跳出循環(huán)之后就返回*this即d2的引用返回值類型??Date& (這個我之前一直沒看到所以就很困惑)

2.2 默認賦值運算符重載:

編譯器生成的默認賦值運算符重載也和默認構(gòu)造函數(shù)中分自定義和內(nèi)置類型那它與默認構(gòu)造函數(shù)有什么區(qū)別,讓我們一探究竟吧

內(nèi)置類型:

概念:編譯器生成的默認賦值運算符會直接逐字節(jié)拷貝內(nèi)置類型成員變量的值。

代碼演示:

//默認賦值運算符重載(內(nèi)置類型)
class Date1
{
public://默認構(gòu)造函數(shù)Date1(int year = 2005, int month = 5, int date = 25){this->_year = year;this->_month = month;this->_date = date;}void print(){std::cout << _year << "-" << _month << "-" << _date << std::endl;}private:int _year;int _month;int _date;
};int main()
{Date1 q1(2024 , 7 , 12);Date1 q5;q5 = q1;q5.print();return 0;
}

輸出:

就如上圖所示,我并沒有寫賦值運算符重載但是它卻給我打印出和q1對象中的成員變量一樣的值,所以我們可以得出結(jié)論編譯器生成的默認賦值運算符會直接逐字節(jié)拷貝內(nèi)置類型成員變量的值。俗稱淺拷貝。

自定義類型:

代碼演示:


//默認賦值運算符重載(自定義類型)
class Date2
{
public:// 賦值運算符重載Date2& operator=(const Date2& d){if (this != &d) { // 自我賦值檢查_a = d._a;}return *this;}private:int _a = 10;
};class Date3
{
public:// 默認構(gòu)造函數(shù)Date3(int year = 2005, int month = 5, int date = 25){this->_year = year;this->_month = month;this->date = date;}void print(){std::cout << _year << "-" << _month << "-" << _date << std::endl;}private:int _year;int _month;int _date;Date2 c; // 包含 Date2 類型的成員變量
};int main()
{Date3 q1(2024, 7, 12);Date3 q5;q5 = q1; // 使用編譯器生成的默認賦值運算符q5.print();return 0;
}

輸出:

如圖所示編譯器生成的默認賦值運算符會調(diào)用自定義類型的賦值運算符重載。

http://www.risenshineclean.com/news/59207.html

相關(guān)文章:

  • 寧波新亞建設(shè)公司網(wǎng)站seo的主要工作內(nèi)容
  • 佛山網(wǎng)站建設(shè)公司怎么做網(wǎng)站文章優(yōu)化技巧
  • 做網(wǎng)站的鏡像是什么意思怎么做市場營銷和推廣
  • 重慶網(wǎng)站建設(shè)哪家公司那家好杭州網(wǎng)站推廣平臺
  • 如何做一家門戶網(wǎng)站seo常規(guī)優(yōu)化
  • 網(wǎng)站建設(shè)的實訓(xùn)心得東莞seo推廣公司
  • 扁平風(fēng)格網(wǎng)站 模板臨沂做網(wǎng)站的公司
  • 互聯(lián)網(wǎng)網(wǎng)站建設(shè)制作精品成品網(wǎng)站源碼
  • 外國人做網(wǎng)站如何推廣app
  • 沈陽大十字街附近做網(wǎng)站公司百度怎么推廣網(wǎng)站
  • 山東省兩學(xué)一做網(wǎng)站seopc流量排行榜企業(yè)
  • 邢臺做網(wǎng)站的價格成都搜索優(yōu)化排名公司
  • 湖里區(qū)建設(shè)局網(wǎng)站無錫網(wǎng)絡(luò)優(yōu)化推廣公司
  • php如何做局域網(wǎng)的網(wǎng)站今日頭條指數(shù)查詢
  • 自己可以進行網(wǎng)站建設(shè)嗎上海知名的seo推廣咨詢
  • 全國疫情最新中高風(fēng)險地區(qū)名單青島百度seo代理
  • 信息設(shè)計網(wǎng)站百度網(wǎng)盤服務(wù)電話6988
  • 東莞外貿(mào)優(yōu)化公司東莞搜索優(yōu)化十年樂云seo
  • 網(wǎng)站建設(shè)寫代碼自己怎么創(chuàng)業(yè)附近哪里有計算機培訓(xùn)班
  • 網(wǎng)站建設(shè)中最重要的南寧百度推廣代理商
  • 網(wǎng)站seoapp阿亮seo技術(shù)
  • 甘肅省城鄉(xiāng)和建設(shè)廳網(wǎng)站首頁seo優(yōu)化方法網(wǎng)站快速排名推廣渠道
  • php在動態(tài)網(wǎng)站開發(fā)深圳網(wǎng)絡(luò)公司推廣平臺
  • 網(wǎng)站建設(shè)信息模板下載在哪里可以做百度推廣
  • 做網(wǎng)站的上市公司海外發(fā)布新聞
  • 番禺網(wǎng)站建設(shè)優(yōu)化網(wǎng)站產(chǎn)品怎么優(yōu)化
  • 平潭城鄉(xiāng)住房建設(shè)廳網(wǎng)站如何推廣小程序
  • 靈犀科技網(wǎng)站開發(fā)精準營銷系統(tǒng)價值
  • 做網(wǎng)站開發(fā)的提成多少錢seo推廣培訓(xùn)費用
  • 怎么做網(wǎng)站結(jié)構(gòu)圖seo公司彼億營銷