課題1では,関数のオーバーロードを学びました.関数のオーバーロードとは,異なる関数に同じ名前を与えることでした.
ここでは,演算子のオーバーロードについて説明します.
これまでは,int型 + int型 のように組込み型のものどうしの演算しか行っていませんでしたが,演算子をオーバーロードすると 自分で作ったクラスのオブジェクト + 自分で作ったクラスのオブジェクトのように,演算子に新しい意味を追加できます.
main.cpp
includeSrcWithFrame("prog_page2/main.cpp", 4, "", false, true); ?>
(ヒント)下記のプログラムは,二つのint型変数を持つクラスにおける演算子=と演算子+のオーバーロード例である. ダウンロード,ビルド,実行し,このプログラムを参考にMyStringを完成させよ.
coord.cpp
includeSrcWithFrame("prog_page2/coord.cpp", 4, "", false, true); ?>
// 関係演算子 == のオーバーロード例 bool coord::operator==(coord ob2)
{
return x == ob2.x && y == ob2.y;
}
|
// 単項演算子 - (負符号)のオーバーロード // 仮引数は不要 coord coord::operator-()
{
x = -x;
y = -y;
return *this;
}
// ++演算子(前置形式)のオーバーロード coord coord::operator++()
{
x++;
y++;
return *this;
}
// ++演算子(後置形式)のオーバーロード // (2008.6.6 変更前の値を返すように修正) coord coord::operator++(int notused)
{
coord tmp = *this;
x++;
y++;
return tmp;
}
|
const int SIZE = 10;
class arraytype {
double a[SIZE];
public:
...
};
// 「代入」もできるように「参照」を返す double &arraytype::operator[](int i)
{
if (i < 0 || i >= SIZE) {
cerr << "エラー!範囲外です.";
cerr << "添字 i = " << i << endl;
exit(1);
}
return a[i];
}
|