プロが教える店舗&オフィスのセキュリティ対策術

#include <iostream>

class hoge{
private:
int a;
public:
hoge(){
a = 0;
}

int operator+(int fuga){
a = a + fuga;
return a;
}

int operator[](int fuga){
return 1;
}
};

int main(){
hoge* p;
p = new hoge;
std::cout << ((*p) + 5) << std::endl;
std::cout << ((*p)[1] ) << std::endl;

// 5
// 1

// std::cout << ((*p) [] 1); エラーです。何故ですか?
}

A 回答 (1件)

>// std::cout << ((*p) [] 1); エラーです。

何故ですか?

定義された構文に従ってないから。
関数的に呼び出したいのなら

(*p).operator[](1)

とか。

この回答への補足

あれ?独自の演算子を定義できる方法だと思ったけど,
int operator$(int fuga){
a = a + fuga;
return a;
}

とかやったら
コンパイルエラーだ(汗

#もしかして規格側で定義された演算子をオーバーロードできるだけで
独自の演算子を書いたり出来ない?(汗
#そうであれば、「規格でそうなっている」で納得することにするけど。
##っつーのも
## $$演算子とかを俺が定義した場合
## $1$と $$ 1 のどちらの演算子を定義したことになるのかなーと思ったから。
## もし記述方法によって書き換えられるとしたら,C++の元になっている
## Cはどういう構造の違いを与えているのかなーと。

補足日時:2008/02/05 12:47
    • good
    • 0
この回答へのお礼

みたいね。
どうやら
int operator +(int fuga){
return 1;
}
という定義が使えるようなので

int operator mod(int fuga){
return 1;
}

とか書いたら

エラー E2076 hoge.cpp 15: オーバーロード可能な演算子が必要
って言われたから

お礼日時:2008/02/05 12:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!