青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 30, 文章 - 0, 評論 - 64, 引用 - 0
數(shù)據(jù)加載中……

VC6.0中重載操作符函數(shù)無法訪問類的私有成員

在 C++ 中,操作符(運算符)可以被重載以改寫其實際操作。
同時我們可以定義一個函數(shù)為類的朋友函數(shù)(friend function)以便使得這個函數(shù)能夠訪問類的私有成員,
這個定義通常在頭文件中完成。

在Visual C++中定義一般的函數(shù)為朋友函數(shù)通常是沒有問題的。
然而對某些重載操作符的函數(shù),
即使我們將它們定義為類的朋友函數(shù),VC的編譯器仍然會顯示出錯信息,
認(rèn)為這些朋友函數(shù)無權(quán)訪問類的私有成員。
我認(rèn)為這應(yīng)該是VC6.0的bug。

以下代碼就是個例子:

// 頭文件 “Sample.h”
            #include<iostream>
            using namespace std;
            class Sample {
            public:
            Sample();
            friend ostream &operator<<(ostream &out, const Sample s);
            friend istream &operator>>(istream &in, Sample & s);
            private:
            int x;
            };

// 實現(xiàn)文件 “Sample.cpp”
            #include “Sample.h”
            Sample::Sample() {
            x=0;
            }
            istream &operator>>(istream &in, Sample & s) {
            cout<<”Please enter a value”<<endl;
            in >> s.x ;
            return in;
            }
            ostream &operator<<(ostream &out, const Sample s) {
            cout << s.x << endl;
            return out;
            }

以上代碼在gnuc++中編譯運行毫無問題。但是在VC++6.0中編譯的時候就會出現(xiàn)以下的編譯錯誤:

Compiling…
Sample.cpp
c:\temp\sample.cpp(8) : error C2248: ‘x’ : cannot access private member declared in class ‘Sample’
c:\temp\sample.h(19) : see declaration of ‘x’
c:\temp\sample.cpp(13) : error C2248: ‘x’ : cannot access private member declared in class ‘Sample’
c:\temp\sample.h(19) : see declaration of ‘x’
Error executing cl.exe.Sample.obj - 2 error(s), 0 warning(s)

在VC++ 6.0中解決這個問題有以下幾種方法:

  • 在頭文件中實現(xiàn)作為朋友函數(shù)的操作符函數(shù)的重載,也就是說在實現(xiàn)文件”Sample.cpp”中將函數(shù)重載的實現(xiàn)去掉,而將頭文件修改如下:
    // 修改后的頭文件 1 “Sample.h”
                    #include<iostream>
                    using namespace std;
                    class Sample {
                    public:
                    Sample();
                    friend ostream &operator<<(ostream &out, const Sample s);
                    friend ostream &operator<<(ostream &out, const Sample s) {
                    cout << s.x << endl;
                    return out;
                    }
                    friend istream &operator>>(istream &in, Sample & s);
                    friend istream &operator>>(istream &in, Sample & s) {
                    cout<<”Please enter a value”<<endl;
                    in >> s.x ;
                    return in;
                    }
                    private:
                    int x;
                    };
    
        
  • 在頭文件中類定義之前將類和朋友操作符函數(shù)的原型特別聲明一下,也就是將頭文件修改如下(實現(xiàn)文件”Sample.cpp”不用作任何修改):
    // 修改后的頭文件 2 “Sample.h”
                    #include<iostream>
                    using namespace std;
                    // 以下3行代碼為新加入
                    class Sample;
                    ostream &operator<<(ostream &out, const Sample s);
                    istream &operator>>(istream &in, Sample & s);
                    class Sample {
                    public:
                    Sample();
                    friend ostream &operator<<(ostream &out, const Sample s);
                    friend istream &operator>>(istream &in, Sample & s);
                    private:
                    int x;
                    };
    
        
  • 第三種方法是對I/O名空間的使用實行明確聲明,也就是說在頭文件”Sample.h”中直接寫:
    #include<iostream>
    using std::ostream;
    using std::istream
    ….
    取代 “using namespace std;”
    注意:在這個例子里我們在實現(xiàn)文件 “Sample.cpp”中包含 “using namespace std;”這句話,否則在實現(xiàn)中就不能使用 “cout” , “cin”, “<< “, “>>” 和 endl 這些關(guān)鍵字和符號。修改后的完整代碼如下:

     

    // Sample.h
                    #include<iostream>
                    using std::istream;
                    using std::ostream;
                    class Sample {
                    public:
                    Sample();
                    friend ostream &operator<<(ostream &out, const Sample s);
                    /*friend ostream &operator<<(ostream &out, const Sample s) {
                    cout << s.x << endl;
                    return out;
                    }*/
                    friend istream &operator>>(istream &in, Sample & s);
                    /*friend istream &operator>>(istream &in, Sample & s) {
                    cout<<”Please enter a value”<<endl;
                    in >> s.x ;
                    return in;
                    }*/
                    private:
                    int x;
                    };
    // “Sample.cpp”
                    #include “Sample.h”
                    using namespace std;
                    Sample::Sample() {
                    x=5;
                    }
                    istream &operator>>(istream &in, Sample & s) {
                    cout<<”Please enter a value”<<endl;
                    in >> s.x ;
                    return in;
                    }
                    ostream &operator<<(ostream &out, const Sample s) {
                    cout << s.x << endl;
                    return out;
                    }
    
        

posted on 2008-12-08 23:50 henry08 閱讀(2402) 評論(5)  編輯 收藏 引用 所屬分類: C++

評論

# re: VC6.0中重載操作符函數(shù)無法訪問類的私有成員  回復(fù)  更多評論   

能講解一下其內(nèi)在原因是什么嗎?
2008-12-09 09:45 | abettor

# re: VC6.0中重載操作符函數(shù)無法訪問類的私有成員  回復(fù)  更多評論   

猜測的成分太多了,friend function好像不是翻成朋友函數(shù),叫友元吧
2008-12-09 09:51 | zuhd

# re: VC6.0中重載操作符函數(shù)無法訪問類的私有成員  回復(fù)  更多評論   

visual c++ 2005 就支持了
2008-12-10 21:45 | 漂漂

# re: VC6.0中重載操作符函數(shù)無法訪問類的私有成員  回復(fù)  更多評論   

hanxiaodkf
2009-07-14 16:50 | han

# re: VC6.0中重載操作符函數(shù)無法訪問類的私有成員[未登錄]  回復(fù)  更多評論   

Thanks
2012-06-25 09:43 | yong
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一本色道久久99精品综合| 国产精品久久久久久超碰| 久久xxxx精品视频| 欧美日韩国产在线播放网站| 在线成人av.com| 久久天堂av综合合色| 宅男66日本亚洲欧美视频| 欧美精品亚洲二区| 一本久道久久综合中文字幕| 亚洲欧洲日本国产| 欧美精品久久99久久在免费线| 激情成人亚洲| 欧美夫妇交换俱乐部在线观看| 久久综合给合久久狠狠狠97色69| 在线成人av| 亚洲黄色毛片| 欧美日韩国产成人在线| 亚洲一区二区三区免费视频 | 亚洲欧美另类久久久精品2019| 国产精品久久久久久久久久免费 | 在线综合亚洲欧美在线视频| 欧美日韩中文字幕| 亚洲女人av| 性欧美xxxx大乳国产app| 国内精品久久久久久影视8| 免播放器亚洲一区| 欧美日韩福利| 欧美专区在线观看一区| 久久黄色网页| 日韩亚洲一区二区| 亚洲伊人一本大道中文字幕| 国产综合色一区二区三区| 欧美高清不卡在线| 欧美系列精品| 美女露胸一区二区三区| 欧美激情第五页| 欧美在线视频免费观看| 久久理论片午夜琪琪电影网| 日韩视频免费观看| 香蕉免费一区二区三区在线观看 | 久久久www成人免费无遮挡大片 | 欧美gay视频| 亚洲影音先锋| 久久精品一区二区三区不卡| 亚洲美女精品成人在线视频| 亚洲愉拍自拍另类高清精品| …久久精品99久久香蕉国产| 日韩视频免费观看高清完整版| 国产日韩在线看片| 亚洲欧洲另类| 禁久久精品乱码| 一区二区三区在线观看欧美| 日韩视频精品在线| 欧美一区二区三区四区在线| 亚洲国产精品久久久久秋霞蜜臀| 亚洲精品一二区| 樱桃成人精品视频在线播放| 一个色综合av| 亚洲国产一区二区a毛片| 亚洲视频在线免费观看| 亚洲国产专区校园欧美| 午夜免费日韩视频| 一区二区三区日韩精品| 久久久久高清| 亚久久调教视频| 欧美另类99xxxxx| 美玉足脚交一区二区三区图片| 国产精品久久久久毛片大屁完整版| 欧美二区在线播放| 国内精品99| 午夜精品久久久| 亚洲午夜成aⅴ人片| 免费不卡视频| 免费成人av| 国产亚洲欧美在线| 亚洲一区在线看| 亚洲一区欧美二区| 欧美日韩精品一区二区三区四区| 免费亚洲网站| 加勒比av一区二区| 欧美在线视频日韩| 久久精品亚洲精品| 国产女主播一区| 亚洲综合日韩在线| 香蕉视频成人在线观看| 国产精品蜜臀在线观看| 一区二区三区欧美在线| 亚洲视频中文字幕| 国产精品久久久久久亚洲调教| 夜夜爽99久久国产综合精品女不卡| 亚洲美女毛片| 欧美视频免费在线| 亚洲天堂视频在线观看| 亚洲欧美一级二级三级| 国产乱码精品一区二区三区忘忧草 | 亚洲午夜av| 午夜国产一区| 国产日韩欧美一区二区三区在线观看| 亚洲自拍啪啪| 久久久久久91香蕉国产| 韩日视频一区| 噜噜噜噜噜久久久久久91| 欧美韩日亚洲| 亚洲精品一区二区三区不| 欧美大色视频| 夜夜嗨av一区二区三区免费区| 午夜精品影院在线观看| 国产亚洲成av人在线观看导航| 久久精品一本| 亚洲国产精品久久久久秋霞蜜臀 | 久久久久久夜| 精品成人乱色一区二区| 欧美激情一区二区三区蜜桃视频 | 免费欧美在线视频| 日韩一级精品视频在线观看| 欧美性猛片xxxx免费看久爱| 亚洲综合首页| 欧美波霸影院| 亚洲一区中文| 伊人男人综合视频网| 欧美高清视频一区| 亚洲伊人伊色伊影伊综合网| 老司机免费视频久久 | 一区二区三区欧美日韩| 久久久综合免费视频| 日韩网站在线| 国产日韩欧美在线观看| 欧美不卡视频一区发布| 亚洲视频一区在线观看| 麻豆国产va免费精品高清在线| 一区二区福利| 在线看片成人| 国产精品久久久久久久久借妻| 久久久久久久综合色一本| 日韩视频在线你懂得| 久久亚洲私人国产精品va媚药 | 亚洲精品一区中文| 久久亚洲春色中文字幕久久久| 一本色道久久综合亚洲精品小说 | 国产精品久久久一区麻豆最新章节 | 久久国产精品99久久久久久老狼| 亚洲国产天堂久久综合网| 国产精品爽黄69| 欧美理论片在线观看| 久久精品系列| 亚洲综合第一| 亚洲欧洲在线免费| 玖玖综合伊人| 久久er精品视频| 亚洲夜间福利| 一本到12不卡视频在线dvd| 亚洲国产精品成人综合| 国产视频久久久久| 国产精品久久久久久超碰 | 性欧美精品高清| 在线综合亚洲| 99www免费人成精品| 18成人免费观看视频| 国产区欧美区日韩区| 国产精品高潮呻吟视频| 欧美片在线播放| 欧美精品免费观看二区| 免费观看成人网| 久久久久久久一区二区三区| 欧美专区日韩专区| 午夜激情久久久| 亚洲一区二区在线观看视频| 日韩亚洲视频在线| 亚洲久久视频| 99av国产精品欲麻豆| 亚洲免费高清视频| 亚洲免费电影在线观看| 亚洲三级毛片| 亚洲美女视频在线观看| 国产在线视频欧美| 久久欧美中文字幕| 欧美亚洲一区二区在线| 亚洲午夜电影在线观看| 99综合视频| 国产精品99久久久久久白浆小说 | 欧美视频不卡中文| 欧美午夜寂寞影院| 国产精品视频网址| 国产日韩精品入口| 国产综合色在线| 亚洲国产欧美国产综合一区| 亚洲欧洲日夜超级视频| 日韩亚洲在线| 亚洲欧美日韩区| 久久久99国产精品免费| 免费看亚洲片| 日韩视频免费在线| 亚洲在线免费观看| 久久久五月天| 欧美精品日韩| 国产精品夜色7777狼人| 一区福利视频| 夜色激情一区二区| 久久成人免费网| 欧美va天堂|