オペレータ

  代入



オブジェクト同士の代入は、デフォルトでメモリがコピーされますので、実装する必要がありません
以下が有効です
  
Integer a,b;
b = 123;
a = b;
a.print();
  
以下は int の代入を実現する為の実装です
  
// *********************************************************
// 代入
// *********************************************************
void Integer::operator = ( int a )
{
	this->nData = a;
}
  
整数をあらわす数字文字列を整数として代入するには以下のコードを実装します
  
// *********************************************************
// 文字列を代入
// *********************************************************
void Integer::operator = ( char *a )
{
	this->nData = atoi( a );
}
  



  足し算



  
// *********************************************************
// 足し算 (1)
// *********************************************************
int Integer::operator + ( int a )
{
	return( this->nData + a );
}
  
このオペレータは以下のコードを実現する為のコードです
  
Integer a,b;
a = 123;
b = a + 27;
b.print();
  
しかし、このままでは以下のコードを実現する事ができません
  
Integer a,b;
a = 123;
b = 27 + a;
b.print();
  
このコードを実現するにはクラス定義に friend キーワードを付けて以下のように定義します

この場合、関数定義がクラススコープでない事に注意して下さい
friend は、引数に自オブジェクト型を使用している必要があります
  
// *********************************************************
// クラス定義
// *********************************************************
class Integer  
{
public:
	Integer();
	virtual ~Integer();
	print();
	// 代入
	void operator = ( int a );
	void operator = ( char *a );
	// 足し算
	int operator + ( int a );
	friend int operator + ( int a, Integer obj );
	int operator + ( Integer obj );
	
	int nData;
};

// *********************************************************
// 足し算 (2)
// *********************************************************
int operator + ( int a, Integer obj )
{
	return( a + obj.nData );
}
  
さらに、オブジェクト同士の足し算ができるように以下のオペーレータを追加します
  
// *********************************************************
// 足し算 (3)
// *********************************************************
int Integer::operator + ( Integer obj )
{
	return( this->nData + obj.nData );
}
  
この他にも定義さえすれば、以下の足し算が可能になります
( クラスのメンバ関数は b = a + "27" で、もう一つは friend となります )
  
Integer a,b;
a = 123;
b = a + "27";
b = "27" + a;
  



  加算代入 +=

  
// *********************************************************
// 加算代入 += (1)
// *********************************************************
int Integer::operator += ( int a )
{
	return( this->nData += a );
}
// *********************************************************
// 加算代入 += (2)
// *********************************************************
int Integer::operator += ( Integer obj )
{
	return( this->nData += obj.nData );
}
// *********************************************************
// 加算代入 += (3)
// *********************************************************
int Integer::operator += ( char *a )
{
	return( this->nData += atoi( a ) );
}
  
以下が実装されます
  
Integer a,b;

// int
a = 123;
a += 27;
a.print();
   
// Integer
a = 123;
b = 27;
a += b;
a.print();

// 文字列
a = 123;
a += "27";
a.print();
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ