派生クラス 解答ページ | Programming Place Plus C++編【言語解説】 第26章

トップページC++編

C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 と更新されており、今後も 3年ごとに更新されます。
なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。

問題①

問題① 標準ライブラリの bitset(【標準ライブラリ】第13章)には、すべてのビットが 1 になっているかどうかを判定するメンバ関数がありません(C++11 で allメンバ関数が追加されました)。このメンバ関数を、bitset を継承して追加してください。


#include <iostream>
#include <bitset>

template <std::size_t BITS>
class MyBitset : public std::bitset<BITS> {
public:
    inline bool all() const
    {
        return size() == count();
    }
};

int main()
{
    MyBitset<10> bset;

    bset.set();
    std::cout << std::boolalpha << bset.all() << std::endl;

    bset.set(0, false);
    std::cout << std::boolalpha << bset.all() << std::endl;
}

実行結果:

true
false

sizeメンバ関数と countメンバ関数が返す結果が一致していれば、全ビットが 1 になっていると考えられます。

STL のクラステンプレートを継承して利用するとすれば、このように機能を拡張する場合ですが、ただし、本編中でも述べているように、派生クラスのデストラクタが呼び出されない使い方をしないように注意が必要です。


参考リンク


更新履歴

’2016/3/20 新規作成。



第26章のメインページへ

C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る