整数配列演算子のオーバーロード
説明
はArrayクラスを定義します:
1.データメンバーにintlengthとint * memsを設定します。これらは、それぞれ配列内の要素の数と要素のリストです。
引数なしのコンストラクター。memsをNULLに設定し、長さを0に設定します。
オーバーロード==演算子。2つの配列オブジェクトが等しいかどうかを判断するために使用されます。同等性には次の2つの状況が含まれます。(1)2つのオブジェクトが同じオブジェクトである、つまり同じアドレスを持っている(覚えておいてください:このポインタは現在のオブジェクトを指します。これは現在のオブジェクトのアドレスです)。(2)の長さ2つのオブジェクトは同じであり、mems内の対応する要素の値は同じです。他のすべてのケースは同じではありません。
フレンド関数を使用して、<<および>>演算子をオーバーロードします。入力および出力形式については、以下を参照してください。
入力は
複数の行に分割されます。
最初の行は正の整数Mで、M個の配列があることを示しています。
各配列は行であり、最初の非負の整数Nは配列内の要素の数を表し、その後にN個の整数があります。
出力に
はM行あります。
出力の最初の行は最初の配列です。
2行目から、対応する配列要素が最初に出力されます(2つの間のスペースで区切られ、最初と最後にスペースを入れることはできません)。配列が空の場合、要素は出力されません。次に、この配列が前の配列と同じであるかどうかに応じて、「上記と等しくない」と「上記と等しい」を出力します。
サンプル入力
5
3 1 2 3
3 1 2 3
0
7 1 2 3 4 5 6 7
7 1 2 3 4 5 6 8
サンプル出力
1 2 3
1 2 3 equal to above.
unequal to above.
1 2 3 4 5 6 7 unequal to above.
1 2 3 4 5 6 8 unequal to above.
タイトル指定コード
int main()
{
int cases;
cin>>cases;
Array arraies[cases];
for (int i = 0; i < cases; i++)
{
cin>>arraies[i];
}
cout<<arraies[0]<<endl;
for (int i = 1; i < cases; i++)
{
if (arraies[i] == arraies[i - 1])
{
cout<<arraies[i]<<" "<<"equal to above."<<endl;
}
else
{
cout<<arraies[i]<<" "<<"unequal to above."<<endl;
}
}
return 0;
}
コード:
#include<iostream>
using namespace std;
class Array{
int length;
int *mems;
public:
Array(){
length=0;
mems=NULL;
}
bool operator ==(const Array A){
if(this==&A){
return true;
}else if(A.length==length){
for(int i=0;i<length;i++){
if(A.mems[i]!=mems[i]){
return false;
}
}
return true;
}else{
return false;
}
}
// 使用友元重载也是ok的
// friend bool operator ==(Array A,Array B){
// if(&A==&B)return true;
// else if(A.length==B.length){
// for(int i=0;i<A.length;i++){
// if(A.mems[i]!=B.mems[i])return false;
// }
// return true;
// }else{
// return false;
// }
// }
//
friend istream& operator >>(istream &is,Array &A){
is>>A.length;
A.mems=new int[A.length];
for(int i=0;i<A.length;i++){
is>>A.mems[i];
}
return is;
}
friend ostream& operator <<(ostream &os,const Array &A){
if(A.length>0){
for(int i=0;i<A.length;i++){
os<<A.mems[i];
if(i<A.length-1)os<<' ';
}
}
return os;
}
};
int main()
{
int cases;
cin>>cases;
Array arraies[cases];
for (int i = 0; i < cases; i++)
{
cin>>arraies[i];
}
cout<<arraies[0]<<endl;
for (int i = 1; i < cases; i++)
{
if (arraies[i] == arraies[i - 1])
{
cout<<arraies[i]<<" "<<"equal to above."<<endl;
}
else
{
cout<<arraies[i]<<" "<<"unequal to above."<<endl;
}
}
return 0;
}