4.0 C++遠征:リロード演算子
4254 ワード
リロード演算子
[TOC]
四、リロード演算子
1.一元演算子の再ロード
I-(マイナス記号)の重荷重(逆を取りましょう)友元関数リロード メンバー関数リロード Ⅱ++記号のリロード前置++符号リロード 後置++符号リロード 2.二元演算子の再ロード
I+(プラス記号)のリロード友元関数リロード メンバー関数リロード Ⅱ < 友元関数リロード 出力演算子はメンバー関数で再ロードできますか?いけません.リロード出力演算子の最初のパラメータはostream&outでなければならないので、メンバー関数として書く場合はthisポインタでなければなりません.
III[](インデックス)のリロードインデックス演算子は友元関数で再ロードできますか?いけません.インデックス演算子の最初のパラメータはthisポインタでなければなりません.
[TOC]
四、リロード演算子
: 。
: 。
: operator
1.一元演算子の再ロード
。
I-(マイナス記号)の重荷重(逆を取りましょう)
// Coordinate.hpp
class Coordinate {
friend Coordinate& operator-(Coordinate &coor);
public:
Coordinate(int x, int y);
private:
int m_iX;
int m_iY;
};
// Coordinate.cpp
Coordinate& Coordinate::operator-(Coordinate &coor) {
coor.m_iX = -coor.m_iX;
coor.m_iY = -coor.m_iY;
return *this;
}
// main.cpp
int main() {
Coordinate coor(3, 5);
-coor; // operator-(coor);
return 0;
}
// Coordinate.hpp
class Coordinate {
public:
Coordinate(int x, int y);
Coordinate& operator-(); // this
private:
int m_iX;
int m_iY;
};
// Coordinate.cpp
Coordinate& Coordinate::operator-() {
m_iX = -m_iX;
m_iY = -m_iY;
return *this;
}
// main.cpp
int main() {
Coordinate coor(3, 5);
-coor; // coor.operator-();
return 0;
}
// Coordinate.hpp
class Coordinate {
public:
Coordinate(int x, int y);
Coordinate& operator++(); // ++
private:
int m_iX;
int m_iY;
};
// Coordinate.cpp
Coordinate& Coordinate::operator++() {
m_iX++;
m_iY++;
return *this;
}
// main.cpp
int main() {
Coordinate coor(3, 5);
++coor; // coor.operator++();
return 0;
}
// Coordinate.hpp
class Coordinate {
public:
Coordinate(int x, int y);
Coordinate operator++(int); // ++(int ++ , )
private:
int m_iX;
int m_iY;
};
// Coordinate.cpp
Coordinate Coordinate::operator++(int) {
Coordinate oldCoor(*this);
m_iX++;
m_iY++;
return oldCoor;
}
// main.cpp
int main() {
Coordinate coor(3, 5);
coor++; // coor.operator++(0);
return 0;
}
。
I+(プラス記号)のリロード
// Coordinate.hpp
class Coordinate {
friend Coordinate operator+(const Coordinate &coor1, const Coordinate &coor2);
public:
Coordinate(int x, int y);
private:
int m_iX;
int m_iY;
};
// Coordinate.cpp
Coordinate operator+(const Coordinate &coor1, const Coordinate &coor2) {
Coordinate tempCoor;
tempCoor.m_iX = coor1.m_iX + coor2.m_iX;
tempCoor.m_iY = coor1.m_iY + coor2.m_iY;
return tempCoor;
}
// main.cpp
int main() {
Coordinate coor1(3, 5);
Coordinate coor2(4, 6);
Coordinate coor3(0, 0);
coor3 = coor1 + coor2; // coor3 = operator+(coor1, coor2);
return 0;
}
// Coordinate.hpp
class Coordinate {
public:
Coordinate(int x, int y);
Coordinate operator+(const Coordinate &coor);
private:
int m_iX;
int m_iY;
};
// Coordinate.cpp
Coordinate operator+(const Coordinate &coor) {
Coordinate tempCoor;
tempCoor.m_iX = this->m_iX + coor.m_iX;
tempCoor.m_iY = this->m_iY + coor.m_iY;
return tempCoor;
}
// main.cpp
int main() {
Coordinate coor1(3, 5);
Coordinate coor2(4, 6);
Coordinate coor3(0, 0);
coor3 = coor1 + coor2; // coor3 = coor1.operator+(coor2);
return 0;
}
// Coordinate.hpp
#include
using namespace std;
class Coordinate {
friend ostream &operator<
III[](インデックス)のリロード
// Coordinate.hpp
class Coordinate {
public:
Coordinate(int x, int y);
int operator[](int index);
private:
int m_iX;
int m_iY;
};
// Coordinate.cpp
int operator[](int index) {
if(index == 0)
return m_iX;
if(index == 1)
return m_iY;
}
// main.cpp
int main() {
Coordinate coor(3, 5);
cout << coor[0]; // coor.operator[](0);
cout << coor[1]; // coor.operator[](1);
return 0;
}