<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

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

        運算符重載:與function overloading異曲同工的是,C++提供所謂的Operator overloading。所謂operators是像  +(加)-(減)*(乘)/(除)>>(位右移)
      <<(位左移)之類的符號,代表一種動作。

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

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

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

      CString str1("Hello, I am J.J.Hou, ");
      CString str2("How are you?");
      CString str3 = str1 + str2; // + 是 CString的一個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)在讓我示范一個overloaded operator的作法,只要在以下類的代碼中加入第18~21行的+號的重載代碼,即可完成CPoint的加法運算:

       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  //對+號進行重載
      19     {
      20         return CPoint(_x+pt._x);
      21     }
      22 
      23 protected:
      24     float _x;
      25 
      26 };

        以operator開頭的函數(shù),表示是個運算子。加法運算子需要左右兩個運算元(operands),左側運算元即成為本函數(shù)的this指向的對象,右側運算元則是本函數(shù)的參數(shù)pt。上述函數(shù)代碼如果像下面這樣表示,會比較清晰,但兩者其實是相同的(因為this指針是個隱藏參數(shù)):

          CPoint operator+(const CPoint& pt) const  //對+號進行重載
          {
              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++中,<<和>>是最常用的重載運算符,用于表示對標準輸入輸出設備(如屏幕和鍵盤)的讀寫操作,極大地方便了編程,可替代繁瑣的printf()和scanf()函數(shù)。這兩個運算符在iostream庫中定義,為C++編程提供了極大的便利。

        Insertion Operator << for stdout: <<本來是位左移運算符,但是在C++的標準庫iostream中被改頭換面,其左側的運算元(operand)被指定為cout(console output device),右側運算元是一個內建型別的objects。我們可以利用它很方便的對cout連續(xù)輸出各種內建型別的數(shù)據(jù)或信息(也是一種objects),不必像C程序那樣需要識別不同類型的數(shù)據(jù)在printf()中的格式符號(如 %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:>>本來是位右移運算符,但在C++標準的iostream中被改頭換面,其左側運算元是cin(console input device),右側運算元是一個內建型別的object。例如:

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

        程序使用者在健盤上輸入,會經由cin裝置流往f變量,其作用相當于C runtime library中的scanf()。

       

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

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

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

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

        如果需要這些class type,必須導入對應的header file。請注意,fstream已經含有iostream,所以不需要重復導入;

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

      #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 }

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

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

      #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 }

        當程序執(zhí)行后,會先給一個提示,然后從文件 "copy.txt" 中一一讀出每一個字符,顯示于屏幕上。上述第0015行如果改為while (inFile >> c) // get each char from file,雖然也能讀出字符,但空格會被忽略,這個并非我們所想要的。

      posted on 2024-04-25 22:31  阮春義  閱讀(401)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 日本一级午夜福利免费区| 无码国模国产在线观看免费| 99久久精品久久久久久婷婷| JIZZJIZZ国产| 亚洲免费观看一区二区三区| 国产精品亚洲av三区色| 在线观看亚洲欧美日本| 国产精成人品日日拍夜夜| 看免费的无码区特aa毛片| 麻花传媒免费网站在线观看| 东方av四虎在线观看| 男女动态无遮挡动态图| 老色鬼永久精品网站| 97久久超碰国产精品2021| 国产太嫩了在线观看| 无码午夜福利片| 熟女精品国产一区二区三区| 国产精品中文第一字幕| 最新亚洲av日韩av二区| 最新中文字幕av无码专区不| 男人天堂亚洲天堂女人天堂| 久久男人av资源站| 国产精品1区2区3区在线观看| 亚洲区综合中文字幕日日| 久久人与动人物a级毛片 | 亚洲成av人片色午夜乱码| 人妻聚色窝窝人体WWW一区| 亚洲人成电影网站色| 和黑人中出一区二区三区| 人妻丝袜无码专区视频网站| 久久人与动人物a级毛片 | 欧美激欧美啪啪片| av人摸人人人澡人人超碰下载| 偷拍美女厕所尿尿嘘嘘小便| 亚洲欧美日产综合在线网| 国产一区二区三区导航| 国产精品人妻久久无码不卡| 麻豆国产va免费精品高清在线| 内射极品少妇xxxxxhd| 四虎女优在线视频免费看| 国产丰满乱子伦无码专区 |