亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

解析C++中不能重載為友元函數的四個運算符

2020-01-26 15:57:18
字體:
來源:轉載
供稿:網友

C++規定有四個運算符 =, ->, [], ()不可以是全局域中的重載(即不能重載為友員函數),這是為什么呢?
現在先說說賦值運算符“=”的重載
C++規定賦值運算符“=”只能重載為類的非靜態成員函數,而不可以重載為類的友元函數。
不能重載為類的靜態成員應該比較容易理解,因為靜態成員函數是屬于整個類的,不是屬于某個對象的,它只能去操作類靜態數據成員。而賦值運算符“=”是基于對象操作的。
那么為什么賦值運算符不可以重載為類的友元函數?像同樣都是雙目運算符的+為什么它就可以呢?

在討論這問題之前,先看一測試的程序:

復制代碼 代碼如下:

#include <iostream>
using namespace std;

class A
{
private:

  int x;
public:
         A(){x=99;}
         A(int xx)
         {
                   cout<<"Call A(int xx)"<<endl;
                   x = xx;
         }
};
int main()
{
         A a;
         a = 7;
}


程序執行結果為:
Call A(int xx)

說明執行a = 7這程序語句時,程序去調用類A中的帶參構造函數。
在類A中加入一賦值運算重載成員函數,如下:

復制代碼 代碼如下:

#include <iostream>
using namespace std;

class A
{
private:
         int x;
public:
         A(){x=99;}
         A(int xx)
         {
                   cout<<"Call A(int xx)"<<endl;
                   x = xx;
         }
         A operator=(int xx)   //重載賦值運算符運算
         {
                   cout<<"Call A operator=(int xx)"<<endl;
                   x = xx;
                   return *this;
         }
};

int main()
{
         A a;
         a = 7;
}

程序運行結果:
Call A operator=(int xx)

說明在類A中已經有相應賦值運算符重載函數的時候,執行賦值語句a = 7;程序會去調用類A中相應的賦值運算符重載函數,而不會像上面原來那樣去調用有參構造函數。

在此,我們可以對C++規則做出以下的判斷:
當類中沒有定義賦值運算符重載成員函數時(注意,在未定義形參數據類型為該類類型的賦值運算符重載函數時,編譯器會自動生成加入),當程序執行到某一賦值語句時,程序就會調用與賦值語句中右值類型匹配的構造函數,而把這右值當作此構造函數的實參。像最初的賦值語句a = 7,執行時,實際做的操作是a(7)。而當類中有定義賦值運算符重載成員函數,執行賦值語句時,程序就只會去調用相應的賦值運算符重載函數。

當明白上面的規則后,現在就可以回過來,討論為什么賦值運算符不可以重載為類的友元函數了。

我們知道友元函數不是類的成員函數,它只是類的“朋友“,具有訪問把它聲明為“朋友”的類的數據成員的權限而已。
那么當把賦值運算符重載為類的友員函數,在程序中執行類對象的賦值語句時,程序就會出現兩種矛盾的選擇。

1、因為它認為類中并沒有重載賦值運算符的成員函數,所以它根據C++的規則,會去調用相應的構造函數。

2、但是在全局里,我們已經重載了參數類型為此類類型的賦值運算符函數,而這賦值語句剛好和這函數匹配上了,根據C++的規則,也會去調用這函數。

程序是不允許有矛盾不確定選擇的,所以當賦值運算符重載為類的友元函數時,編譯器就會提示錯誤。

對于剩下的3個運算符 ->, [], () 為什么不能重載為友元函數,也是跟上面一樣的道理。即編譯器發現當類中沒有定義這3個運算符的重載成員函數時,就會自己加入默認的運算符重載成員函數。
例當類A中沒有定義運算符->的重載成員函數,但是我們仍然可以對類A對象指針用->的形式調用指針指向的對象里的成員。像類A里有成員函數f(),當

復制代碼 代碼如下:

A a;
A* p = &a;
 p->f();   //雖然類A中沒有自己定義運算符->重載成員函數,但這里仍可這樣使用

然而,當我們把->運算符重載為類A的友元函數時,程序就會出現跟把賦值運算符重載友元一樣的情況,即產生矛盾性。
聲明:以上僅為個人見解

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚洲日本网站| 欧美精品一区二区三区国产精品| 久久中文字幕国产| 欧美日本高清一区| 国产成人av在线| 日韩欧美a级成人黄色| 亚洲精品电影在线观看| 成人免费观看网址| 日韩欧美在线视频日韩欧美在线视频| 久久久精品亚洲| 成人做爰www免费看视频网站| 亚洲欧美在线x视频| 上原亚衣av一区二区三区| 亚洲а∨天堂久久精品喷水| 精品视频在线播放色网色视频| 国产精品久久久久久久久久久久久久| 人人澡人人澡人人看欧美| 亚洲精品久久久久久久久久久久久| 亚洲aⅴ日韩av电影在线观看| 中文字幕在线精品| 一本色道久久88综合日韩精品| 亚洲人成欧美中文字幕| 91精品久久久久久久久| 91免费视频国产| 亚洲白虎美女被爆操| 亚洲电影免费观看高清完整版| 欧美一级视频免费在线观看| 韩国国内大量揄拍精品视频| 亚洲精品国产精品久久清纯直播| 国产一区二区三区日韩欧美| 午夜精品在线视频| 欧美一区二区三区精品电影| 这里只有精品丝袜| 欧美亚洲国产视频| 欧美性20hd另类| 欧美一二三视频| 91精品国产综合久久香蕉| 日韩欧美在线国产| 亚洲国产精品网站| 国产精品男人的天堂| 成年人精品视频| 91地址最新发布| 7m精品福利视频导航| 久久亚洲国产成人| 亚洲国产日韩一区| 91亚洲精华国产精华| 亚洲男人天堂网站| 欧美高清在线视频观看不卡| 精品国偷自产在线| 亚洲永久免费观看| 亚洲四色影视在线观看| 欧美日韩不卡合集视频| 91成人免费观看网站| 日本精品一区二区三区在线| 欧美激情国产日韩精品一区18| 久久网福利资源网站| 97国产suv精品一区二区62| 亚洲精品国产品国语在线| 91在线观看免费网站| 97视频com| 国产午夜精品一区理论片飘花| 美女久久久久久久久久久| 精品久久久久国产| 国产精品旅馆在线| 亚洲综合av影视| y97精品国产97久久久久久| 午夜精品一区二区三区av| 亚洲aⅴ日韩av电影在线观看| 日本精品性网站在线观看| 日韩欧美综合在线视频| 欧美尺度大的性做爰视频| 45www国产精品网站| 亚洲天堂网在线观看| 亚洲国产精品小视频| 欧美一级片一区| 视频一区视频二区国产精品| 91亚洲永久免费精品| 97精品国产97久久久久久免费| 久久久亚洲天堂| 亚洲春色另类小说| 国产亚洲成精品久久| 91精品久久久久久久久久久久久久| 欧美精品在线免费| 成人av资源在线播放| 色在人av网站天堂精品| 亚洲精选一区二区| 中文字幕久久久av一区| 久久久在线视频| 2019中文字幕在线免费观看| 蜜月aⅴ免费一区二区三区| 麻豆一区二区在线观看| 精品呦交小u女在线| 亚洲国产女人aaa毛片在线| 在线观看免费高清视频97| 亚洲天堂一区二区三区| 亚洲国产精品高清久久久| 亚洲夜晚福利在线观看| 粉嫩老牛aⅴ一区二区三区| 久久国内精品一国内精品| 日韩精品极品视频| 原创国产精品91| 久久综合久久88| 久久精品国产欧美亚洲人人爽| 国产精品高精视频免费| 亚洲乱码av中文一区二区| 成人高h视频在线| 久久久久久69| 欧美久久久精品| 91欧美精品成人综合在线观看| 欧美孕妇与黑人孕交| 精品久久久久久电影| 国产成人在线精品| 97在线免费视频| 中文字幕亚洲图片| 亚洲激情成人网| 成人免费视频在线观看超级碰| 亚洲第一区第二区| 成人av在线亚洲| 综合网日日天干夜夜久久| 午夜精品久久久久久99热| 国产丝袜精品第一页| 7m精品福利视频导航| 成人激情视频免费在线| 色黄久久久久久| 日本精品一区二区三区在线| 国产精品久久久久aaaa九色| 国产精品美女无圣光视频| 日韩中文字幕在线播放| 日韩高清欧美高清| 91精品在线一区| 日本道色综合久久影院| 91在线播放国产| 欧美在线视频观看免费网站| 午夜精品理论片| 欧美日韩高清区| 亚洲欧美色图片| 91av在线播放| 91精品国产高清久久久久久久久| 亚洲视频在线播放| 亚洲视频电影图片偷拍一区| 精品中文字幕在线2019| 国产美女直播视频一区| 日韩在线精品一区| 久久影院资源站| 岛国精品视频在线播放| 欧美成人免费小视频| 亚洲综合中文字幕68页| 日韩精品免费看| 日韩高清电影免费观看完整版| 久久精品成人欧美大片古装| 日韩亚洲欧美中文高清在线| 97视频在线免费观看| 国产精品香蕉国产| 久久av.com| 亚洲精品乱码久久久久久金桔影视| 亚洲第一精品夜夜躁人人爽| 日韩av综合网站| 日韩在线精品一区| 欧美日韩福利视频| 日韩精品日韩在线观看| 亚洲视频第一页| 欧美一级淫片播放口| 亚洲人成电影网站色www| 亚洲国产99精品国自产|