C++中Cout


C++の中の演算子のリロード、少し覚えておいて、カスタムクラスの演算子のリロード関数も関数で、自分でリロードした演算子の優先度は自分で定義したために変えることはできなくて、依然として内部演算子と同じ優先度の演算順序に従います!
フォーラムで質問を見て、間違ったところはこうです.
int A = 0;
cout<
 
   
  

, , ,“ ”。 VS , 。 。

int A = 0;
cout<

のようにすればいいのですが、 はなぜなのか、カッコを やして の を めたのか、カッコの が も いことを っています.なぜなら、coutが ロードされたからです.
1. リロード :
C++で された の は、 データ のみです.しかし、 には、クラスなどの くのユーザー タイプについても、 の が です.この 、C++でこれらの を し、 のタイプで の を できるように の に しい を する があります. のリロードの は のリロードであり、C++の を し、C++の も な の つでもある.
リロードは、 を することによって され、 は、リロードされる が う を します. の は の の と しており、 の いは、 の がキーワードoperatorとその ロードする で されていることである. の なフォーマットは のとおりです.
   operator ()
{
     
}
 2. の ロードは、 のルールに います.
(1)クラス 「.」を き、メンバーポインタ 「.*」、 ドメイン 「::」、sizeof 、および3つの 「?:」 は、C++のすべての を ロードできます.
(2)リロード は、C++ の の の にあるリロード な に され、 しい は できません.
(3) リロードは に リロードであるため,コンパイラによる リロードの は, リロードの に う.
(4)リロード の は, の や を えることはできず, のオペランドの や を えることもできない.
(5) の ロードは、 タイプオブジェクトに する の を することはできません.ユーザー タイプのオブジェクトとのみ できます.または、ユーザー タイプのオブジェクトと タイプのオブジェクトを して する にのみ できます.
(6) のリロードは、 しいタイプのデータの の に じて の を に し、リロードの は の と し、 なくリロード を しないようにしなければならない.
(7)リロード の はデフォルトのパラメータを つことができなくて、さもなくば のパラメータの を えて、 の 3 と しました;
(8)リロードされた はユーザーのカスタムタイプのみで、そうでなければリロードではなく のC++ データ の のルールを し、 を させる.
(9)ユーザー クラスの は、 、リロードされてから できますが、2つの で、 「=」と「&」はユーザーのリロードを としません.
(10) のリロードは、メンバー の であってもよいし、 、 メンバー の であってもよい.
 
3. のリロードの :
のリロードには、 、クラスにリロードされたメンバー とクラスにリロードされた メンバー の2つの があります. メンバー は です.(1つの を メンバー、 として ロードできます.ただし、このような がクラスのプライベートおよび メンバーにアクセスする は、クラスの インタフェースで されている データとデータを み す を する があります.これらの を び すとパフォーマンスが します.これらの をインラインしてパフォーマンスを させることができます.)   
1)メンバー
がクラスに ロードされるメンバー の なフォーマットは、 のとおりです.
     operator ()
    {
     
    }
がクラスのメンバー として ロードされると、 のパラメータ は のオペランドよりも1つ ない( を く)ため、メンバー はthisポインタでクラスのオブジェクトに にアクセスし、 の の として するためです.したがって、 のようになります.
(1) がクラスのメンバー として ロードされる 、 は の オペランドであるパラメータのみを に します.
(2) がクラスのメンバー として ロードされる 、パラメータを に する はありません.すなわち、 にパラメータがありません.
(3) がクラスのメンバー として ロードされる 、 には パラメータが です.
メンバー を び すフォーマットは のとおりです.
    .operator ()
それは
    
えば、a+bはa.operator+(b)に である. に、 の を しています.
2)
がクラスに ロードされる の なフォーマットは、 のとおりです.
    friend operator ()
   {
     
    }
がクラスのメタ に ロードされると、このポインタは されていないため、オペランドの は せず、すべてのオペランドは のパラメータによって されなければならず、 のパラメータはオペランドの から に つ つ している.
を び すフォーマットは のとおりです.
    operator (,)
それは
    
えば、a+bはoperator+(a,b)に である.
4.2 のリロード の
くの 、 をクラスのメンバー とクラスのメタ に ロードすることはできます.ただし、メンバー と には、 のような があります.
(1) に、 はクラスのメンバー として ロードすることが ましい. は、クラスの として ロードすることが ましい.
(2) の はクラスの として ロードできません:=,(),[],->です.
(3)タイプ は1つのクラスのメンバー としてのみ でき,クラスの として できない.
(4) の でオブジェクトの を する がある は、「メンバー として ロード」を するとよい.
(5) に なオペランド( に のオペランド)が なタイプ を む は、 のみが されます.
(6) がメンバー である 、 のオペランド(または のオペランドのみ)は、 クラスのクラスオブジェクト(またはそのクラスオブジェクトへの )である があります. のオペランドが なるオブジェクト、または タイプのオブジェクトである がある 、 は として する があります.
(7)リロード が である がある は、「 としてリロード」を します.
5. :
1)メンバー を して を ロードします.
#include
using namespace std;
class X{
   int i;
public:
   X(int ii=0){i=ii;}
   X operator   +(const X &rx){
       i+=rx.i;
       return X(i);
   }
   int GetI(){return i;}
};
int main(){
   X a(1),b(3);
   cout<
   return 0;
}
 
2) で を ロードする
:この
#include
using namespace std;
のエラーが します.
fatal error C1001: INTERNAL COMPILER ERROR
だからヘッダファイル :#include
 
#include
using namespace std;
class Complex{
public:
   Complex(double r=0.0,double i=0.0){
       real=r;
       image=i;
   }
   friend Complex operator+(const Complex&,const Complex&);
   void display();
private:
   double real;
   double image;
};
 
Complex operator+(const Complex &c1,const Complex &c2){
   return Complex(c1.real+c2.real,c1.image+c2.image);
}
 
void Complex::display(){
   cout<
}
 
int main(){
   Complex c1(3,4),c2(5,-10),c3;
   c3=c1+c2;
   cout<
   cout<
   cout<
   return 0;
}