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++編を作成中です。
問題① 本章の冒頭で取り上げた関数オブジェクトの例を改造して、初期値や増分値を自由に変更できるようにしてください。
たとえば、次のようにできます。
#include <iostream>
class Counter {
public:
(int init = 0) : mCount(init)
Counter{}
inline int operator()(int n = 1)
{
+= n;
mCount return mCount;
}
private:
int mCount;
};
int main()
{
;
Counter c1(100);
Counter c2
std::cout << c1() << std::endl;
std::cout << c1(3) << std::endl;
std::cout << c1(-1) << std::endl;
std::cout << c2() << std::endl;
std::cout << c2(3) << std::endl;
std::cout << c2(-1) << std::endl;
}
実行結果:
1
4
3
101
104
103
問題② 問題①をさらに改造して、Counter をクラステンプレートにしてください。
たとえば、次のようにできます。
#include <iostream>
template <typename T>
class Counter {
public:
(T init = 0) : mCount(init)
Counter{}
inline T operator()(T n = 1)
{
+= n;
mCount return mCount;
}
private:
;
T mCount};
int main()
{
<int> c1(5);
Counter<double> c2(5.5);
Counter
std::cout << c1() << std::endl;
std::cout << c1(3) << std::endl;
std::cout << c1(-1) << std::endl;
std::cout << c2() << std::endl;
std::cout << c2(0.1) << std::endl;
std::cout << c2(-0.1) << std::endl;
}
実行結果:
6
9
8
6.5
6.6
6.5
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |