国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

運(yùn)算符重載的函數(shù)作為類的成員函數(shù)和友元函數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了運(yùn)算符重載的函數(shù)作為類的成員函數(shù)和友元函數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

??博主主頁:@??. 一懷明月??

?????專欄系列:線性代數(shù),C初學(xué)者入門訓(xùn)練,題解C,C的使用文章,「初學(xué)」C++

??座右銘:“不要等到什么都沒有了,才下定決心去做”

??????大家覺不錯(cuò)的話,就懇求大家點(diǎn)點(diǎn)關(guān)注,點(diǎn)點(diǎn)小愛心,指點(diǎn)指點(diǎn)??????

目錄

??運(yùn)算符重載的函數(shù)作為類的成員函數(shù)和友元函數(shù)

??運(yùn)算符重載定義為類的成員函數(shù)

??運(yùn)算符重載函數(shù)作為類的友元函數(shù)

??實(shí)現(xiàn)“+”,“-“的普通重載函數(shù)和友元重載函數(shù)

??單目運(yùn)算符"++"和"--"的重載


??運(yùn)算符重載的函數(shù)作為類的成員函數(shù)和友元函數(shù)

??運(yùn)算符重載定義為類的成員函數(shù)

將運(yùn)算符重載定義為類的成員函數(shù)的原型在內(nèi)部聲明格式:

class 類名
{
  ...
    返回類型 operator 運(yùn)算符(參數(shù)列表);
  ...
};

在類外定義運(yùn)算符重載函數(shù)的格式:

返回類型 類名::operator 運(yùn)算符(參數(shù)列表)
{
    ...
}

??運(yùn)算符重載函數(shù)作為類的友元函數(shù)

將運(yùn)算符重載函數(shù)作為類的友元函數(shù)。它與用成員函數(shù)重載運(yùn)算符的函數(shù)的不同在于,成員函數(shù)重載運(yùn)算符的函數(shù)本身是類中的成員函數(shù),而友元函數(shù)是獨(dú)立于類外的普通函數(shù)。

將運(yùn)算符重載函數(shù)定義為類的友元函數(shù),其原型在類的內(nèi)部聲明格式如下:

class 類名
{
    ...
      friend 返回類型 operator 運(yùn)算符(參數(shù)列表);
    ...
};

在類外定義友元運(yùn)算符重載函數(shù)的格式:

返回類型 operator 運(yùn)算符(參數(shù)列表)
{
    ...
}

與用成員函數(shù)定義的方法相比較,只是在類聲明函數(shù)原型時(shí)前面多了一個(gè)關(guān)鍵字friend,表明這是一個(gè)友元運(yùn)算符重載函數(shù),只有聲明為友元函數(shù),才可以訪問類的private成員;由于友元運(yùn)算符重載函數(shù)不是該類的成員函數(shù),所以在類外定義時(shí)不需要加上類名。

??實(shí)現(xiàn)“+”,“-“的普通重載函數(shù)和友元重載函數(shù)

#include<iostream>
using namespace std;
class A
{
public:
    A(double x=0,double y=0):a(x),b(y)
    {
        ;
    }
    void show()
    {
        cout<<"運(yùn)算后的結(jié)果為:"<<endl;
        cout<<"("<<a<<","<<b<<")"<<endl;
    }
    A operator+(A& ptr);//運(yùn)算符普通重載函數(shù)
    A operator-(A& ptr);
//    friend A operator+(A& pf,A& pc);//友元運(yùn)算符重載函數(shù)
//    friend A operator-(A& pf,A& pc);
private:
    double a;
    double b;
};
A A::operator+(A& ptr)//為什么ptr可以調(diào)用私有成員
{
    return A(a+ptr.a,b+ptr.b);
}
A A::operator-(A& ptr)
{
    return A(a-ptr.a,b-ptr.b);
}
//A operator+(A& pf,A& pc)
//{
//    return A(pf.a+pc.a);
//}
//A operator-(A& pf,A& pc)
//{
//    return A(pf.a-pc.a,pf.b-pc.b);
//}
int main()
{
    A a(1,0),b(0,1),c(1,0),d(0,1),ph;
    ph=a+b;
    ph.show();
    ph=a-b;
    ph.show();
    return 0;
}
普通重載函數(shù)和友元重載函數(shù)的結(jié)果都是一樣的
運(yùn)算后的結(jié)果為:
(1,1)
運(yùn)算后的結(jié)果為:
(1,-1)

大家可能會(huì)疑惑,運(yùn)算符重載函數(shù)可以是類的成員函數(shù),也可以是類的友元函數(shù),是否可以既不是類的成員函數(shù)也不是類的友元函數(shù),其實(shí)是可以的,但是很少會(huì)用到,原因是普通函數(shù)不能直接訪問類的私有成員,由于友元的使用會(huì)破壞類的封裝,因此從原則上說,要盡量將運(yùn)算符重載為成員函數(shù)。有時(shí)為了方便理解,一般將單目運(yùn)算符重載為成員函數(shù),將雙目運(yùn)算符重載為友元函數(shù)但是也有例外,C++規(guī)定,有的運(yùn)算符(賦值運(yùn)算符,下標(biāo)運(yùn)算符,函數(shù)調(diào)用運(yùn)算符)必須重載為類的成員函數(shù),有的運(yùn)算符則不能重載為類的成員函數(shù)(插入運(yùn)算符"<<"和流提取運(yùn)算符">>"、類型轉(zhuǎn)化運(yùn)算符)。

??單目運(yùn)算符"++"和"--"的重載

有兩種形式:前置的++ --,后置的++ --

有兩種方法:運(yùn)算符重載的成員函數(shù)? 運(yùn)算符重載的友元函數(shù)

(1)運(yùn)算符重載的成員函數(shù):

(1)運(yùn)算符重載的成員函數(shù)
#include<iostream>
using namespace std;
class A
{
public:
    A(int count=0):Count(count)
    {
        ;
    }
    void show()
    {
        cout<<"運(yùn)算后結(jié)果為:"<<Count<<endl;
    }
    //前置++,--
    A operator++()
    {
        ++Count;
        return *this;
    }
    A operator--()
    {
        --Count;
        return *this;
    }
    //后置++,--
    A operator++(int)
    {
        A num=*this;
        ++(*this);
        return num;
    }
    A operator--(int)
    {
        A num=*this;
        --(*this);
        return num;
    }
private:
    int Count;
};
int main()
{
    A a(100),b(100),c(100),d(100);
    (++a).show();
    (b++).show();
    (--c).show();
    (d--).show();
    return 0;
}
結(jié)果為:
運(yùn)算后結(jié)果為:101
運(yùn)算后結(jié)果為:100
運(yùn)算后結(jié)果為:99
運(yùn)算后結(jié)果為:100

(2)運(yùn)算符重載的友元函數(shù):

(1)運(yùn)算符重載的成員函數(shù)
#include<iostream>
using namespace std;
class A
{
public:
    A(int count=0):Count(count)
    {
        ;
    }
    void show()
    {
        cout<<"運(yùn)算后結(jié)果為:"<<Count<<endl;
    }
    friend A operator++(A& ptr);
    friend A operator--(A& ptr);
    friend A operator++(A& ptr,int);
    friend A operator--(A& ptr,int);
private:
    int Count;
};
//前置++,--
A operator++(A& ptr)
{
    ++ptr.Count;
    return ptr;
}
A operator--(A& ptr)
{
    --ptr.Count;
    return ptr;
}
//后置++,--
A operator++(A& ptr,int)
{
    A num;
    num=ptr;
    ++ptr.Count;
    return num;
}
A operator--(A& ptr,int)
{
    A num;
    num=ptr;
    --ptr.Count;
    return num;
}

int main()
{
    A a(100),b(100),c(100),d(100);
    (++a).show();
    (b++).show();
    (--c).show();
    (d--).show();
    return 0;
}
結(jié)果:
運(yùn)算后結(jié)果為:101
運(yùn)算后結(jié)果為:100
運(yùn)算后結(jié)果為:99
運(yùn)算后結(jié)果為:100

??????如果大家還有不懂或者建議都可以發(fā)在評(píng)論區(qū),我們共同探討,共同學(xué)習(xí),共同進(jìn)步。謝謝大家! ?????????文章來源地址http://www.zghlxwxcb.cn/news/detail-478346.html

到了這里,關(guān)于運(yùn)算符重載的函數(shù)作為類的成員函數(shù)和友元函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++】構(gòu)造函數(shù),析構(gòu)函數(shù),拷貝構(gòu)造,運(yùn)算符重載,const 成員

    默認(rèn)成員函數(shù):如果不顯示,編譯器默認(rèn)生成 構(gòu)造函數(shù):是一個(gè)特殊的 成員函數(shù) ,函數(shù)名與類名相同,專門用于 初始化類對(duì)象 函數(shù)名與類名相同 無返回值 ,沒有被聲明為void類型 對(duì)象實(shí)例化時(shí) 編譯器自動(dòng)調(diào)用 , Date d1 ,或 Date d2(2023, 4, 21) 構(gòu)造函數(shù)可以重載,一個(gè)類中可以

    2023年04月24日
    瀏覽(25)
  • 【C++深入淺出】類和對(duì)象中篇(六種默認(rèn)成員函數(shù)、運(yùn)算符重載)

    【C++深入淺出】類和對(duì)象中篇(六種默認(rèn)成員函數(shù)、運(yùn)算符重載)

    目錄 一. 前言? 二. 默認(rèn)成員函數(shù) 三. 構(gòu)造函數(shù) 3.1 概念 3.2 特性 四. 析構(gòu)函數(shù) 4.1 概念 4.2 特性 五. 拷貝構(gòu)造函數(shù) 5.1 概念 5.2 特性 六. 運(yùn)算符重載 6.1 引入 6.2 概念 6.3 注意事項(xiàng) 6.4 重載示例 6.5 賦值運(yùn)算符重載 6.6 前置++和后置++運(yùn)算符重載 七. const成員函數(shù) 7.1 問題引入 7.2 定義

    2024年02月09日
    瀏覽(100)
  • 【C++初階】類與對(duì)象:6大默認(rèn)成員函數(shù)------拷貝構(gòu)造和賦值運(yùn)算符重載

    【C++初階】類與對(duì)象:6大默認(rèn)成員函數(shù)------拷貝構(gòu)造和賦值運(yùn)算符重載

    ? 拷貝構(gòu)造函數(shù): 只有單個(gè)形參,該形參是對(duì)本類類型對(duì)象的引用(一般常用const修飾) ,在用已存在的類類型對(duì)象創(chuàng)建新對(duì)象時(shí)由編譯器自動(dòng)調(diào)用。 1. 拷貝構(gòu)造函數(shù)是 構(gòu)造函數(shù)的一個(gè)重載形式 ; 2. 拷貝構(gòu)造函數(shù)的 參數(shù)只有一個(gè)且必須是類類型對(duì)象的引用 ,使用傳值方式編

    2024年02月03日
    瀏覽(26)
  • C++ 類和對(duì)象篇(八) const成員函數(shù)和取地址運(yùn)算符重載

    C++ 類和對(duì)象篇(八) const成員函數(shù)和取地址運(yùn)算符重載

    目錄 一、const成員函數(shù) 1. const成員函數(shù)是什么? 2. 為什么有const成員函數(shù)? 3. 什么時(shí)候需要使用const修飾成員函數(shù)?? 二、取地址運(yùn)算符重載 1. 為什么需要重載取地址運(yùn)算符? 2. 默認(rèn)取地址運(yùn)算符重載函數(shù) 3.?默認(rèn)const取地址運(yùn)算符重載函數(shù) 4. 什么時(shí)候要顯示重載取地址運(yùn)算

    2024年02月07日
    瀏覽(27)
  • 【C++】:拷貝構(gòu)造函數(shù)與賦值運(yùn)算符重載的實(shí)例應(yīng)用之日期類的實(shí)現(xiàn)

    【C++】:拷貝構(gòu)造函數(shù)與賦值運(yùn)算符重載的實(shí)例應(yīng)用之日期類的實(shí)現(xiàn)

    ??日期類的實(shí)現(xiàn),將按以下聲明依次進(jìn)行,其中因?yàn)镻rint函數(shù)比較短,直接放到類里面讓其變成內(nèi)聯(lián)函數(shù) ??而我們實(shí)現(xiàn)日期類經(jīng)常要用到某月有多少天,在這里先把獲得某月有多少天的函數(shù)實(shí)現(xiàn)出來。實(shí)現(xiàn)時(shí)先檢查傳參有沒有問題,在注意把數(shù)組設(shè)置成靜態(tài)的,出了作用域

    2024年02月08日
    瀏覽(28)
  • 【C++技能樹】令常規(guī)運(yùn)算符用在類上 --類的六個(gè)成員函數(shù)II

    【C++技能樹】令常規(guī)運(yùn)算符用在類上 --類的六個(gè)成員函數(shù)II

    Halo,這里是Ppeua。平時(shí)主要更新C語言,C++,數(shù)據(jù)結(jié)構(gòu)算法…感興趣就關(guān)注我吧!你定不會(huì)失望。 C++中為了增強(qiáng)代碼的可讀性,加入了運(yùn)算符的重載,與其他函數(shù)重載一樣。其命名格式如下: 返回值類型 operator操作符(參數(shù)列表) 但并不是所有運(yùn)算符都可以重載的: 不可以自定

    2024年02月05日
    瀏覽(30)
  • [C++] 類與對(duì)象(中)類中六個(gè)默認(rèn)成員函數(shù)(2)-- 運(yùn)算符重載 -- 取地址及const取地址操作符重載

    [C++] 類與對(duì)象(中)類中六個(gè)默認(rèn)成員函數(shù)(2)-- 運(yùn)算符重載 -- 取地址及const取地址操作符重載

    ? 本篇我們以日期類來展開講。對(duì)于一個(gè)日期,我們?nèi)绾稳ケ却笮∧兀繉?duì)年月日依次進(jìn)行比較可以,但是可以直接比較嗎? 我們可以看到,對(duì)于自定義類型的日期類直接去比較兩個(gè)日期的大小是錯(cuò)誤的,因此我們需要對(duì)運(yùn)算符賦予特殊的功能,去實(shí)現(xiàn)可以對(duì)自定義類型的比較

    2024年02月13日
    瀏覽(34)
  • 【C++】STL——list的模擬實(shí)現(xiàn)、構(gòu)造函數(shù)、迭代器類的實(shí)現(xiàn)、運(yùn)算符重載、增刪查改

    【C++】STL——list的模擬實(shí)現(xiàn)、構(gòu)造函數(shù)、迭代器類的實(shí)現(xiàn)、運(yùn)算符重載、增刪查改

    list使用文章 析構(gòu)函數(shù) ??在定義了一個(gè)類模板list時(shí)。我們讓該類模板包含了一個(gè)內(nèi)部結(jié)構(gòu)體_list_node,用于表示鏈表的節(jié)點(diǎn)。該結(jié)構(gòu)體包含了指向前一個(gè)節(jié)點(diǎn)和后一個(gè)節(jié)點(diǎn)的指針以及節(jié)點(diǎn)的值。在list中保存了鏈表的頭節(jié)點(diǎn)指針和鏈表長度大小。 ? ? ??因?yàn)閘ist的底層實(shí)現(xiàn)

    2024年02月14日
    瀏覽(27)
  • C++——類和對(duì)象3|日期類型|Cout運(yùn)算符重載|Cin運(yùn)算符重載|const成員|

    C++——類和對(duì)象3|日期類型|Cout運(yùn)算符重載|Cin運(yùn)算符重載|const成員|

    目錄 日期類型? Date.h? Date.cpp? Test.cpp? 實(shí)現(xiàn)Cout運(yùn)算符重載? 實(shí)現(xiàn)Cin運(yùn)算符重載? 根據(jù)日期算星期? 修改后完整代碼?? Date.h? Date.cpp? const成員 ?取地址及const取地址操作符重載 習(xí)題? 計(jì)算日期到天數(shù)轉(zhuǎn)換? ? ?一個(gè)類到底可以重載哪些運(yùn)算符,要看哪些運(yùn)算符對(duì)這個(gè)類型有

    2023年04月13日
    瀏覽(27)
  • 【C++】類與對(duì)象(2補(bǔ)充運(yùn)算符重載,const成員)

    作者:愛寫代碼的剛子 時(shí)間:2023.5.11 本篇作為【C++】類與對(duì)象(2)的補(bǔ)充(運(yùn)算符重載、const成員) 賦值運(yùn)算符重載 運(yùn)算符重載 C++為了增強(qiáng)代碼的可讀性引入了運(yùn)算符重載,運(yùn)算符重載是具有特殊函數(shù)名的函數(shù),也具有其返回值類 型,函數(shù)名字以及參數(shù)列表,其返回值類

    2024年02月04日
    瀏覽(58)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包