C++輸出輸入操作符重載的深刻剖析。本站提示廣大學習愛好者:(C++輸出輸入操作符重載的深刻剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C++輸出輸入操作符重載的深刻剖析正文
操作符的重載有一些規矩:
1. 重載操作符必需具有一個類類型或列舉類型操作數。這條規矩強迫重載操作符不克不及從新界說用於內置類型對象的操作符的寄義。
如:int operator+(int, int), 弗成以
2. 為類設計重載操作符的時刻,必需選擇是將操作符設置為類成員照樣通俗非成員函數。在某些情形下,法式沒有選擇,操作符必需是成員;在別的一些情形下,有些經歷可以指點我們做出決議。上面是一些指點:
a. 賦值(=),下標([]),挪用(())和成員拜訪箭頭(->)等操作符必需界說為成員,將這些操作符界說為非成員函數將在編譯時標志為毛病。
b. 像賦值一樣,復合賦值操作符平日應界說為類的成員。與賦值分歧的是,紛歧定非得如許做,假如界說為非成員復合賦值操作符,不會湧現編譯毛病。
c. 轉變對象狀況或與給定類型慎密接洽的其他一些操作符,如自增,自減息爭援用,平日應界說為類成員。
d 對稱的操作符,如算術操作符,相等操作符,關系操作符和位操作符,最好界說為通俗非成員函數。
e io操作符必需界說為非成員函數,重載為類的友元。
// OverloadCinCout.cpp : 界說掌握台運用法式的進口點。
//
#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); // 所以應當聲明為類的友元函數
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;
}