ページ 11

+演算子のオーバーロード

Posted: 2008年11月28日(金) 21:57
by 大工
配列同士を足し合わせる+演算子をオーバーロードしようとしたらコンパイルエラーとなりました.
引数を int operator+(int, int); とするのは禁止されているのは分かるのですが,なぜポインタを
渡してはいけないのでしょうか?

hoge.cpp:6: error: ‘int* operator+(int*, int*)’ must have an argument of class or enumerated type

#include<iostream>

#define  N     10
typedef int* p_int;

p_int operator+(const p_int p, const p_int q) {

	p_int array_;
	array_ = new int[N];

	for(int i = 0; i < N; i++) {

		array_ = p + q;
	}

	return array_;
}

int main(void) {

        // まだ途中です	

	return 0;
}

Re:+演算子のオーバーロード

Posted: 2008年11月28日(金) 23:31
by 御津凪
(VC++ ヘルプから抜粋)

オーバーロードされた演算子に、クラス型のパラメータが指定されていません。

"a < b" (a と b は型クラス A) を記述できるためには、参照 (ポインタではなく参照を使用) または型によるパラメータを少なくとも 1 つ渡す必要があります。

どちらのパラメータもポインタの場合は、ポインタ アドレスの純粋な比較が行われるため、ユーザー定義の変換は使用されません。

-------------------------------------

つまり、演算子オーバーロードは、最低でもどちらかの型がクラス型でなくてはならなく、かつ両方ともポインタ型であってはならない、ということです。