// ( r13.C ) // 演算子のオ−バロ−ド:ただの関数を使う場合 // #include #include class String { // オ−バロ−ディングを多義化とも言う int len ; char* str ; public: void set( char* p ) { len = strlen( p ) ; str = new char[len+1] ; strcpy( str,p ) ; } void put() { cout << len << " : " << str << "\n" ; } friend int operator==( String&,String& ) ; } ; int operator==( String& t,String& u ) // == をオ−バロ−ドしている { if ( t.len != u.len ) // 真ならば1、偽ならば0を返すようにする return 0 ; else if ( strcmp(t.str,u.str)==0 ) return 1 ; // strcmp は大文字、小文字を区別して判断する return 0 ; } main() { String x,y ; x.put() ; // 初期化をしていないので、変な値が入っているはず x.set( "Katou" ) ; // 文字列を入れる y.set( "Yamaguchi" ) ; if ( x == y ) // ここに注目 cout << "OK \n" ; else cout << "NG \n" ; } /* [結果] 1979718768 : // 変な値が入っていました。クラスの定義がまずい NG */