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

C++多態(tài)與虛擬:運(yùn)算符重載(Operator Overloading)

這篇具有很好參考價(jià)值的文章主要介紹了C++多態(tài)與虛擬:運(yùn)算符重載(Operator Overloading)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

  運(yùn)算符重載:與function overloading異曲同工的是,C++提供所謂的Operator overloading。所謂operators是像??+(加)-(減)*(乘)/(除)>>(位右移)
<<(位左移)之類(lèi)的符號(hào),代表一種動(dòng)作。

  面對(duì)operators,我們應(yīng)該把他想像是一種函數(shù),只不過(guò)形式比較特殊罷了。一般函數(shù)的參數(shù)出現(xiàn)在括號(hào)()之中,而operator的參數(shù)圍繞著一個(gè)operator符號(hào)(之前或之后),編程語(yǔ)言?xún)?nèi)置的數(shù)據(jù)類(lèi)型(比如整數(shù)`int`、浮點(diǎn)數(shù)`float`、長(zhǎng)整數(shù)`long`等)所使用的操作符(比如加法`+`、減法`-`、乘法`*`等)是由語(yǔ)言本身直接提供的,而不是通過(guò)任何外部庫(kù)或模塊來(lái)實(shí)現(xiàn)的。

  C++允許程序員為class type's object設(shè)計(jì)專(zhuān)門(mén)的operators,使objects的操作能夠像內(nèi)建型別的一樣的自然而直觀(guān)。讓operator以種形式呈現(xiàn),但符號(hào)不變,這個(gè)就是operator overloading。

  Operator overloading的存在一下褒貶不一,支持者認(rèn)為它使得程序代碼變得更精簡(jiǎn)漂亮,反對(duì)者認(rèn)為容易把程序員搞迷糊掉。但是,我想,誰(shuí)都不可否認(rèn)下面這樣的程序代碼確實(shí)是精簡(jiǎn)漂亮:
  

CString str1("Hello, I am J.J.Hou, ");
CString str2("How are you?");
CString str3 = str1 + str2; // + 是 CString的一個(gè)overloaded operator
// 于是 str3 為 "Hello, I am J.J.Hou, How are you?"
int i = 5;
double pi = 3.141592653;
cout << "i=" << i << " and pi=" << pi << endl;
// 于是 console 屏幕上出現(xiàn)"i=5 and pi=3.141592653"。

  現(xiàn)在讓我示范一個(gè)overloaded operator的作法,只要在以下類(lèi)的代碼中加入第18~21行的+號(hào)的重載代碼,即可完成CPoint的加法運(yùn)算:

 1 class CPoint{
 2 
 3 public:
 4 
 5    CPoint()
 6    {
 7         _x=0;
 8 
 9    }
10 
11     CPoint(float y){
12 
13         _x=y;
14     }
15     float x(){return _x;}
16     void  x(float xval){_x=xval;}
17 
18     CPoint operator+(const CPoint& pt) const  //對(duì)+號(hào)進(jìn)行重載
19     {
20         return CPoint(_x+pt._x);
21     }
22 
23 protected:
24     float _x;
25 
26 };

  以operator開(kāi)頭的函數(shù),表示是個(gè)運(yùn)算子。加法運(yùn)算子需要左右兩個(gè)運(yùn)算元(operands),左側(cè)運(yùn)算元即成為本函數(shù)的this指向的對(duì)象,右側(cè)運(yùn)算元?jiǎng)t是本函數(shù)的參數(shù)pt。上述函數(shù)代碼如果像下面這樣表示,會(huì)比較清晰,但兩者其實(shí)是相同的(因?yàn)閠his指針是個(gè)隱藏參數(shù)):

    CPoint operator+(const CPoint& pt) const  //對(duì)+號(hào)進(jìn)行重載
    {
        return CPoint(this->_x+pt._x);
    }

  有了上述的 CPoint::operator+,現(xiàn)在你可以這么使用它:

1 CPoint pt1(7.2), pt2(5.3), pt3;
2 pt3 = pt1 + pt2;
3 cout << "pt3.x = " << pt3.x() << endl; // 12.5

  C++中,<<和>>是最常用的重載運(yùn)算符,用于表示對(duì)標(biāo)準(zhǔn)輸入輸出設(shè)備(如屏幕和鍵盤(pán))的讀寫(xiě)操作,極大地方便了編程,可替代繁瑣的printf()和scanf()函數(shù)。這兩個(gè)運(yùn)算符在iostream庫(kù)中定義,為C++編程提供了極大的便利。

  Insertion Operator << for stdout: <<本來(lái)是位左移運(yùn)算符,但是在C++的標(biāo)準(zhǔn)庫(kù)iostream中被改頭換面,其左側(cè)的運(yùn)算元(operand)被指定為cout(console output device),右側(cè)運(yùn)算元是一個(gè)內(nèi)建型別的objects。我們可以利用它很方便的對(duì)cout連續(xù)輸出各種內(nèi)建型別的數(shù)據(jù)或信息(也是一種objects),不必像C程序那樣需要識(shí)別不同類(lèi)型的數(shù)據(jù)在printf()中的格式符號(hào)(如?%s、%d、%f...):

1 #include <iostream.h>
2 ...
3 int i = 5;
4 double pi = 3.141592653;
5 cout << "i=" << i << " and pi=" << f << endl;

  Extraction Operator(>>) for stdin:>>本來(lái)是位右移運(yùn)算符,但在C++標(biāo)準(zhǔn)的iostream中被改頭換面,其左側(cè)運(yùn)算元是cin(console input device),右側(cè)運(yùn)算元是一個(gè)內(nèi)建型別的object。例如:

1 #include <iostream.h>
2 ...
3 float f;
4 cout << "f = ? ";
5 cin >> f;

  程序使用者在健盤(pán)上輸入,會(huì)經(jīng)由cin裝置流往f變量,其作用相當(dāng)于C runtime library中的scanf()。

?

  Insertion Operator << for file:就像iostream支持對(duì)user‘s terminal的輸入輸出一樣,c++另有一組class types支持對(duì)文件的輸入輸出:

  1.ifstream衍生自istream,支持文件的輸入。

  2.ofstream衍生自?ostream,支持文件的輸出。

  3. fstream衍生自 iostream?支持文件的輸入輸出。

  如果需要這些class type,必須導(dǎo)入對(duì)應(yīng)的header file。請(qǐng)注意,fstream已經(jīng)含有iostream,所以不需要重復(fù)導(dǎo)入;

  下面是信息輸入到文件的案例:

#0001 #include <fstream.h> // include iostream.h
#0002
#0003 int main()
#0004 {
#0005   cout << "All your keyboard input in monitor "
#0006       << "will into copy.txt.\n"
#0007       << "Terminate by ^Z\n\n";
#0008
#0009   ofstream outFile("copy.txt");
#0010   if (!outFile) {
#0011     cout << "Cannnot open copy.txt for output" << endl;
#0012     return -1;
#0013   }
#0014
#0015   char c;
#0016   while (cin.get(c)) // get each char from keyboard
#0017   outFile << c; // outFile.put(c) 亦 可
#0018
#0019   return 0;
#0020 }

  當(dāng)程序執(zhí)行后,會(huì)先提示輸入,然后接收所有來(lái)自于鍵盤(pán)的字符,一一放進(jìn)”copy.txt"文件中,直到接收到^z?才停止。

  Extraction Operator >> for file:下面是將文件的內(nèi)案輸出到屏幕上的示例:

#0001 #include <fstream.h> // include iostream.h
#0002
#0003 int main()
#0004 {
#0005   cout << "All text in copy.txt "
#0006   << "will stream into monitor.\n\n";
#0007
#0008   ifstream inFile("copy.txt");
#0009   if (!inFile) {
#0010     cout << "Cannnot open copy.txt for input" << endl;
#0011     return -1;
#0012   }
#0013
#0014   char c;
#0015   while (inFile.get(c)) // get each char from file
#0016   cout.put(c); // output to monitor
#0017
#0018   return 0;
#0019 }

  當(dāng)程序執(zhí)行后,會(huì)先給一個(gè)提示,然后從文件?"copy.txt"?中一一讀出每一個(gè)字符,顯示于屏幕上。上述第0015行如果改為while?(inFile >>?c)?// get each?char?from?file,雖然也能讀出字符,但空格會(huì)被忽略,這個(gè)并非我們所想要的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-858115.html

到了這里,關(guān)于C++多態(tài)與虛擬:運(yùn)算符重載(Operator Overloading)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(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++】詳解運(yùn)算符重載,賦值運(yùn)算符重載,++運(yùn)算符重載

    【C++】詳解運(yùn)算符重載,賦值運(yùn)算符重載,++運(yùn)算符重載

    目錄 前言 運(yùn)算符重載 概念 目的 寫(xiě)法 調(diào)用 注意事項(xiàng) 詳解注意事項(xiàng) 運(yùn)算符重載成全局性的弊端 類(lèi)中隱含的this指針 賦值運(yùn)算符重載 賦值運(yùn)算符重載格式 注意點(diǎn) 明晰賦值運(yùn)算符重載函數(shù)的調(diào)用 連續(xù)賦值 傳引用與傳值返回 默認(rèn)賦值運(yùn)算符重載 前置++和后置++重載 先梳理一下

    2024年04月25日
    瀏覽(32)
  • C# 類(lèi)class、繼承、多態(tài)性、運(yùn)算符重載,相關(guān)練習(xí)題

    34.函數(shù)重載 35.幾個(gè)相同的函數(shù)? print() ,用于打印不同的數(shù)據(jù)類(lèi)型。 ? 36.基類(lèi)和派生類(lèi) ? 37.基類(lèi)的初始化 ? 38.多重繼承 ? 39.動(dòng)態(tài)多態(tài)性 ? 40.抽象性和虛方法 ? 41.通過(guò)虛方法 area() 來(lái)計(jì)算不同形狀圖像的面積 ? 42.運(yùn)算符重載的實(shí)現(xiàn) ? @www.runoob.com?

    2024年02月09日
    瀏覽(32)
  • 【C++】運(yùn)算符重載案例 - 字符串類(lèi) ⑤ ( 重載 大于 > 運(yùn)算符 | 重載 小于 < 運(yùn)算符 | 重載 右移 >> 運(yùn)算符 - 使用全局函數(shù)重載 | 代碼示例 )

    使用 成員函數(shù) 實(shí)現(xiàn) 等于判斷 == 運(yùn)算符重載 : 首先 , 寫(xiě)出函數(shù)名 , 函數(shù)名規(guī)則為 \\\" operate \\\" 后面跟上要重載的運(yùn)算符 , 要對(duì) String a , b 對(duì)象對(duì)比操作 , 使用 大于 運(yùn)算符 , 使用時(shí)用法為 a b ; 函數(shù)名是 operate ; 然后 , 根據(jù)操作數(shù) 寫(xiě)出函數(shù)參數(shù) , 參數(shù)一般都是 對(duì)象的引用 ; 要對(duì)

    2024年02月07日
    瀏覽(27)
  • C++,運(yùn)算符重載——關(guān)系運(yùn)算符練習(xí)

    C++,運(yùn)算符重載——關(guān)系運(yùn)算符練習(xí)

    一、關(guān)系運(yùn)算符重載 = = == != ?二、知識(shí)點(diǎn)整理 ?

    2024年02月11日
    瀏覽(25)
  • 【C++】運(yùn)算符重載

    目錄 1. 基本概念 1.1 直接調(diào)用一個(gè)重載的運(yùn)算符函數(shù) 1.2 某些運(yùn)算符不應(yīng)該被重載 1.3 使用與內(nèi)置類(lèi)型一致的含義 1.4 賦值和復(fù)合賦值運(yùn)算符 1.5 選擇作為成員或者非成員 2. 輸入和輸出運(yùn)算符 2.1 輸出運(yùn)算符重載 2.2 輸入運(yùn)算符重載 3. 算術(shù)和關(guān)系運(yùn)算符 3.1 算數(shù)運(yùn)算符重載 3.2

    2024年02月11日
    瀏覽(32)
  • C++——運(yùn)算符重載

    C++——運(yùn)算符重載

    運(yùn)算符重載,就是對(duì)已有的運(yùn)算符重新進(jìn)行定義,賦予其另一種功能,以適應(yīng)不同的數(shù)據(jù)類(lèi)型。 運(yùn)算符重載的目的是讓語(yǔ)法更加簡(jiǎn)潔 運(yùn)算符重載不能改變本來(lái)寓意,不能改變基礎(chǔ)類(lèi)型寓意 運(yùn)算符重載的本質(zhì)是另一種函數(shù)調(diào)用(是編譯器去調(diào)用) 這個(gè)函數(shù)統(tǒng)一的名字叫opera

    2024年02月16日
    瀏覽(34)
  • C++:重載運(yùn)算符

    C++:重載運(yùn)算符

    1.重載不能改變運(yùn)算符運(yùn)算的對(duì)象個(gè)數(shù) 2.重載不能改變運(yùn)算符的優(yōu)先級(jí)別 3.重載不能改變運(yùn)算符的結(jié)合性 4.重載運(yùn)算符必須和用戶(hù)定義的自定義類(lèi)型的對(duì)象一起使用,其參數(shù)至少應(yīng)該有一個(gè)是類(lèi)對(duì)象,或類(lèi)對(duì)象的引用 5.重載運(yùn)算符的功能要類(lèi)似于該運(yùn)算符作用于標(biāo)準(zhǔn)類(lèi)型數(shù)據(jù)

    2024年02月10日
    瀏覽(20)
  • 復(fù)習(xí) --- C++運(yùn)算符重載

    .5 運(yùn)算符重載 運(yùn)算符重載概念:對(duì)已有的運(yùn)算符重新進(jìn)行定義,賦予其另外一種功能,以適應(yīng)不同的數(shù)據(jù)類(lèi)型 4.5.1 加號(hào)運(yùn)算符重載 作用:實(shí)現(xiàn)兩個(gè)自定義數(shù)據(jù)類(lèi)型相加的運(yùn)算 4.5.2 左移運(yùn)算符重載 4.5.3遞增運(yùn)算符重載 作用:通過(guò)重載遞增運(yùn)算符,實(shí)現(xiàn)自己的整型數(shù)據(jù) 4.5.4 賦

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

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

    目錄 日期類(lèi)型? 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è)類(lèi)到底可以重載哪些運(yùn)算符,要看哪些運(yùn)算符對(duì)這個(gè)類(lèi)型有

    2023年04月13日
    瀏覽(27)
  • C++中重載相等運(yùn)算符 ==

    相等運(yùn)算(==)是一種關(guān)系運(yùn)算,與不等運(yùn)算(!=)關(guān)系密切。 通常情況下,C++ 中的類(lèi)通過(guò)定義相等運(yùn)算符來(lái)檢驗(yàn)兩個(gè)對(duì)象是否相等。也就是說(shuō)它們會(huì)比較對(duì)象的每一個(gè)數(shù)據(jù)成員,只有當(dāng)所有對(duì)應(yīng)的 成員都相等時(shí)才認(rèn)為兩個(gè)對(duì)象相等。依據(jù)這一思想,我們的 Sales_data 類(lèi)的相等

    2024年02月12日
    瀏覽(17)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包