国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

C++輸入輸出操作符重載的深入分析

2020-01-26 16:03:42
字體:
供稿:網(wǎng)友
操作符的重載有一些規(guī)則:
1. 重載操作符必須具有一個類類型或枚舉類型操作數(shù)。這條規(guī)則強制重載操作符不能重新定義用于內(nèi)置類型對象的操作符的含義。
如:int operator+(int, int), 不可以   
2. 為類設(shè)計重載操作符的時候,必須選擇是將操作符設(shè)置為類成員還是普通非成員函數(shù)。在某些情況下,程序沒有選擇,操作符必須是成員;在另外一些情況下,有些經(jīng)驗可以指導(dǎo)我們做出決定。下面是一些指導(dǎo):
a. 賦值(=),下標(biāo)([]),調(diào)用(())和成員訪問箭頭(->)等操作符必須定義為成員,將這些操作符定義為非成員函數(shù)將在編譯時標(biāo)記為錯誤。
b. 像賦值一樣,復(fù)合賦值操作符通常應(yīng)定義為類的成員。與賦值不同的是,不一定非得這樣做,如果定義為非成員復(fù)合賦值操作符,不會出現(xiàn)編譯錯誤。
c. 改變對象狀態(tài)或與給定類型緊密聯(lián)系的其他一些操作符,如自增,自減和解引用,通常應(yīng)定義為類成員。
d 對稱的操作符,如算術(shù)操作符,相等操作符,關(guān)系操作符和位操作符,最好定義為普通非成員函數(shù)。
e io操作符必須定義為非成員函數(shù),重載為類的友元。
復(fù)制代碼 代碼如下:

// OverloadCinCout.cpp : 定義控制臺應(yīng)用程序的入口點。
//
#include "stdafx.h"
#include "iostream"
#include "string"
using namespace std;
class Fruit
{
public:
 Fruit(const string &nst = "apple", const string &cst = "green"):name(nst),colour(cst){}
 ~Fruit(){}
 friend ostream& operator << (ostream& os, const Fruit& f);  //輸入輸出流重載,不是類的成員,
 friend istream& operator >> (istream& is, Fruit& f);       // 所以應(yīng)該聲明為類的友元函數(shù)
private:
    string name;
 string colour;
};
ostream& operator << (ostream& os, const Fruit& f)
{
 os << "The name is " << f.name << ". The colour is " << f.colour << endl;
 return os;
}
istream& operator >> (istream& is, Fruit& f)
{
 is >> f.name >> f.colour;
 if (!is)
 {
  cerr << "Wrong input!" << endl;
 }
 return is;
}
int _tmain(int argc, _TCHAR* argv[])
{
 Fruit apple;
 cout << "Input the name and colour of a kind of fruit." << endl;
 cin >> apple;     
 cout << apple;
 return 0;
}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 荃湾区| 韶关市| 云梦县| 诏安县| 福贡县| 宜春市| 莲花县| 天水市| 灵川县| 政和县| 商河县| 石棉县| 华池县| 济阳县| 通渭县| 北流市| 东山县| 廊坊市| 长白| 原阳县| 溧水县| 鄯善县| 区。| 乌鲁木齐县| 通州市| 渭源县| 嵩明县| 灵台县| 家居| 库伦旗| 曲阜市| 长沙县| 黔江区| 西城区| 神木县| 永定县| 榆树市| 琼海市| 靖边县| 武强县| 东乡县|