C++編で扱っている C++ は 2003年に登場した C++03
という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14
-> C++17 -> C++20 -> C++23 と更新されています。
なかでも C++11 での更新は非常に大きなものであり、これから C++
の学習を始めるのなら、C++11
よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい
C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。
問題① 「幅」と「高さ」をまとめて「大きさ」を表現する Sizeクラスを定義し、必要と思われる演算子をオーバーロードしてください。「幅」と「高さ」は int型で表現されるものとします。
たとえば、次のように、加減算と比較に関する演算子を定義します。
#include <iostream>
class Size {
public:
(int width, int height) :
Size(width), mHeight(height)
mWidth{}
inline Size& operator+=(const Size& rhs)
{
+= rhs.GetWidth();
mWidth += rhs.GetHeight();
mHeight return *this;
}
inline Size& operator-=(const Size& rhs)
{
-= rhs.GetWidth();
mWidth -= rhs.GetHeight();
mHeight return *this;
}
inline int GetWidth() const
{
return mWidth;
}
inline int GetHeight() const
{
return mHeight;
}
inline int GetArea() const
{
return mWidth * mHeight;
}
private:
int mWidth;
int mHeight;
};
const Size operator+(const Size& lhs, const Size& rhs)
{
return Size(lhs) += rhs;
}
const Size operator-(const Size& lhs, const Size& rhs)
{
return Size(lhs) -= rhs;
}
bool operator==(const Size& lhs, const Size& rhs)
{
return lhs.GetWidth() == rhs.GetWidth()
&& lhs.GetHeight() == rhs.GetHeight()
;
}
bool operator!=(const Size& lhs, const Size& rhs)
{
return !(lhs == rhs);
}
bool operator<(const Size& lhs, const Size& rhs)
{
return lhs.GetArea() < rhs.GetArea();
}
bool operator>(const Size& lhs, const Size& rhs)
{
return lhs.GetArea() > rhs.GetArea();
}
bool operator<=(const Size& lhs, const Size& rhs)
{
return !(lhs > rhs);
}
bool operator>=(const Size& lhs, const Size& rhs)
{
return !(lhs < rhs);
}
std::ostream& operator<<(std::ostream& lhs, const Size& rhs)
{
<< rhs.GetWidth() << ", " << rhs.GetHeight();
lhs return lhs;
}
int main()
{
(5, 10);
Size s1(10, 5);
Size s2
= s1 + s2;
s1 std::cout << s1 << std::endl;
= s1 - s2;
s1 std::cout << s1 << std::endl;
+= s2;
s1 std::cout << s1 << std::endl;
-= s2;
s1 std::cout << s1 << std::endl;
+= Size(1, 1);
s1 std::cout << std::boolalpha
<< (s1 == s2) << "\n"
<< (s1 != s2) << "\n"
<< (s1 < s2) << "\n"
<< (s1 > s2) << "\n"
<< (s1 <= s2) << "\n"
<< (s1 >= s2) << std::endl;
}
実行結果:
15, 15
5, 10
15, 15
5, 10
false
true
false
true
false
true
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |