独習C++ 新版(高橋航平 επιστημη(エピステーメー))|翔泳社の本
  1. ホーム >
  2. 書籍 >
  3. 独習C++ 新版

独習C++ 新版


監修

形式:
書籍
発売日:
ISBN:
9784798150239
価格:
本体3,380円+税
仕様:
B5変・640ページ
分類:
プログラミング・開発
シリーズ:
独習

本書籍の他の形式を確認する

  • このエントリーをはてなブックマークに追加

標準教科書がC++17に対応し、
完全書き下ろしリニューアルで9年ぶりに新登場!

システム開発者、ゲームプログラマーをはじめ、
すべてのC++学習者、待望の解説書。

boostコミッターの著者により、
旧版の特徴である「扱う内容の深さは」そのままに、
より自然でわかりやすい解説に完全リニューアルしました。

言語仕様の初歩から標準ライブラリの基礎まで、
より丁寧で、より詳しい解説となった一冊です。

===目次===
- 第1章 C++の基本的な言語機能(1)
- 第2章 C++の基本的な言語機能(2)
- 第3章 クラス
- 第4章 分割コンパイル、ビルド
- 第5章 配列、ポインター、右辺値参照
- 第6章 演算子オーバーロード
- 第7章 継承
- 第8章 入出力システム
- 第9章 テンプレート
- 第10章 例外処理
- 第11章 実行時型情報とキャスト演算子
- 第12章 データ構造とアルゴリズム
- 第13章 文字列処理


シリーズをもっと見る

第1章 C++の基本的な言語機能(1)
 1.1 Hello, world
 1.2 変数と関数
 1.3 演算子
 1.4 条件分岐
 1.5 組み込み型とポインター
 1.6 配列と文字列
 1.7 繰り返し
 この章の理解度チェック

第2章 C++の基本的な言語機能(2)
 2.1 構造体・共用体・列挙体
 2.2 クラス概要
 2.3 参照
 2.4 型推論
 2.5 型の別名定義
 2.6 コンソールからの入力
 2.7 関数オーバーロード
 2.8 ラムダ式
 この章の理解度チェック

第3章 クラス
 3.1 constメンバー関数とmutable
 3.2 コンストラクターとデストラクター
 3.3 初期値を受け取るコンストラクター
 3.4 デフォルトの初期値
 3.5 継承の概要
 3.6 オブジェクトポインター
 3.7 クラス、構造体、共用体の関係性
 3.8 フレンド関数の概要
 3.9 staticクラスメンバー
 この章の理解度チェック

第4章 分割コンパイル、ビルド
 4.1 識別子とC++のキーワード
 4.2 宣言と定義
 4.3 スコープ
 4.4 初期化構文付き条件分岐
 4.5 分割コンパイル
 4.6 インライン関数
 4.7 名前空間
 4.8 リンケージ
 4.9 プリプロセッサー
 この章の理解度チェック

第5章 配列、ポインター、右辺値参照
 5.1 配列とポインター
 5.2 オブジェクトの配列
 5.3 newとdeleteの使用
 5.4 newとdeleteの詳細
 5.5 {}による初期化とstd::initializer_list
 5.6 参照渡し
 5.7 参照を返す関数
 5.8 右辺値参照
 5.9 関数ポインターと関数リファレンス
 5.10 thisのキャプチャ
 5.11 関数ポインターに変換可能なラムダ式
 この章の理解度チェック

第6章 演算子オーバーロード
 6.1 演算子オーバーロードの基本
 6.2 算術演算子のオーバーロード
 6.3 項数の異なる算術演算子のオーバーロード
 6.4 ビット演算子のオーバーロード
 6.5 関係演算子と論理演算子のオーバーロード
 6.6 添字演算子のオーバーロード
 6.7 ポインター関連演算子のオーバーロード
 6.8 関数呼び出し演算子のオーバーロード
 6.9 フレンドな演算子オーバーロード
 6.10 代入演算子の詳細
 6.11 変換関数の作成方法
 この章の理解度チェック

第7章 継承
 7.1 アクセス制御
 7.2 継承時のコンストラクター/デストラクターの動作
 7.3 派生クラスへのポインター
 7.4 仮想関数の詳細
 7.5 多重継承
 7.6 仮想基底クラス
 7.7 派生、オーバーライドの抑止
 この章の理解度チェック

第8章 入出力システム
 8.1 C++の入出力の基礎
 8.2 書式設定された出力
 8.3 その他のテキスト入出力関数
 8.4 入出力マニピュレーターの使用
 8.5 ファイル入出力の基本
 8.6 書式不定のバイナリ入出力
 8.7 ランダムアクセス
 8.8 入出力状態のチェック
 この章の理解度チェック

第9章 テンプレート
 9.1 関数テンプレート
 9.2 クラステンプレート
 9.3 仮想関数とstaticメンバー
 9.4 特殊化
 9.5 型推論
 9.6 非型テンプレートパラメーター
 9.7 参照の推論と完全転送
 9.8 依存名
 9.9 可変引数テンプレート
 9.10 型特性
 9.11 ラムダ式の引数の型推論
 9.12 クラステンプレートのテンプレートパラメーターの型推論
 この章の理解度チェック

第10章 例外処理
 10.1 例外処理の基礎
 10.2 例外処理の詳細
 10.3 new演算子の例外処理
 10.4 標準例外
 この章の理解度チェック

第11章 実行時型情報とキャスト演算子
 11.1 実行時型情報(RTTI)
 11.2 キャスト演算子
 11.3 dynamic_castの利用
 この章の理解度チェック

第12章 データ構造とアルゴリズム
 12.1 コンテナクラス
 12.2 std::vector
 12.3 std::list
 12.4 タプル
 12.5 std::setとstd::map
 12.6 アルゴリズム
 この章の理解度チェック

第13章 文字列処理
 13.1 文字列処理の概要
 13.2 文字コード
 13.3 文字列操作
 13.4 数値・文字列間の変換
 13.5 正規表現
 この章の理解度チェック

付属データはこちら

会員特典はこちら

書籍への問い合わせ

正誤表、追加情報をご確認の上、こちらよりお問い合わせください

書影の利用許諾について

本書籍に関する利用許諾申請はこちらになります

追加情報はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2020年01月28日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 006
[構文]複数変数の同時宣言
type-name variable-name1, variable-name2……; int main() { int a, b, c; // int型の変数、a,b,cを同時に宣言 }
type-name variable-name1, variable-name2……; (以下、独立コードです) int main() { int a, b, c; // int型の変数、a,b,cを同時に宣言 }
2019.11.26
1刷 080
練習問題2.1の3
u.x.y = 20;
u.s.y = 20;
2020.01.21
1刷 082
[構文]クラスメンバーのアクセス指定子:1行目
class /class-name/
class class-name
2019.11.26
1刷 143
実行結果
引数付きコンストラクター呼び出し 共通コンストラクター呼び出し alice
共通コンストラクター呼び出し 引数付きコンストラクター呼び出し alice
2020.01.28
1刷 174
リスト3.20 Aのコンストラクター定義内
// クラスのメンバー変数のようにアクセスできる std::cout << "&f: " << &f << std::endl << "&i: " << &i << std::endl; << "&l: " << &l << std::endl
// クラスのメンバー変数のようにアクセスできる std::cout << "&f: " << &f << std::endl << "&i: " << &i << std::endl << "&l: " << &l << std::endl;
2019.11.05
1刷 174
リスト3.20 get_iメンバー関数の定義
float A::get_i() const { return i; }
int A::get_i() const { return i; }
2019.11.05
1刷 243
リスト4.26および続く解説文
#include <iostream> #define PLUS(a, b) (a + b) // 加算をする関数形式マクロ #define HOGE int main() { #if PLUS(defined(HOGE), 0) std::cout << "PLUS(defined(HOGE), 0)はtrueです。" << std::endl; // ① #else std::cout << "PLUS(defined(HOGE), 0)はfalseです。" << std::endl; // ② #endif } [実行結果] PLUS(defined(HOGE), 0)はfalseです。 #if の条件式に関数形式マクロを使っていますが、最初にこのマクロ展開が行われ次のようになり ます。 #if (defined(HOGE) + 0) このとき HOGE というマクロが定義されているので defined(HOGE) は 1 となり、(1 + 0) を計算 すると 1 になるので、この条件文は true となり①のプログラムが有効となります。
#include <iostream> #define HOGE int main() { #if defined(HOGE) std::cout << "defined(HOGE)はtrueです。" << std::endl; // ① #else std::cout << "defined(HOGE)はfalseです。" << std::endl; // ② #endif } [実行結果] defined(HOGE)はfalseです。 このとき HOGE というマクロは(中身が空であっても)定義されているので defined(HOGE) は 1 となり、この条件文は true となり①のプログラムが有効となります。
2019.11.26
1刷 269
リスト5.13 Objectクラスの宣言
class Object { std::string name; public: Object() : object("NO NAME") { } explicit Object(std::string name) : name(name) { } ~object(); void show_name() const; };
class Object { std::string name; public: Object() : Object("NO NAME") { } explicit Object(std::string name) : name(name) { } ~Object(); void show_name() const; };
2019.11.05
1刷 273
リスト5.15キャプション
リスト5.15 std::initialiser_listの使用例
リスト5.15 std::initializer_listの使用例
2019.11.25
1刷 274
リスト5.15内、コンストラクター定義
// std::initializer_listを受け取るコンストラクター int_vector::int_vector(std::initializer_list init) : m_size{init.size()}, m_array{new int [init.size()]} { // std::initializer_listの中身を使って動的配列を初期化する for (std::size_t i = 0; i < init.size(); ++i) { array[i] = init[i]; } } int_vector::~int_vector() { delete [] array; }
// std::initializer_listを受け取るコンストラクター int_vector::int_vector(std::initializer_list init) : m_size{init.size()}, m_array{new int [init.size()]} { std::size_t i = 0; // std::initializer_listの中身を使って動的配列を初期化する for (int e : init) { m_array[i] = e; i += 1; } } int_vector::~int_vector() { delete [] m_array; }
2019.11.25
1刷 316
リスト6.5内
auto v = ~(x ^ y) | (z & x)
auto v = ~(x ^ y) | (z & x);
2019.11.05
1刷 317
リスト6.6 operator==関数の定義内
return value == other.value;
return value == rhs.value;
2019.11.05
1刷 321
実行結果3行目
zは0
zは0ではない
2020.01.28
1刷 333
リスト6.14 2つ目のoperator-()関数の定義
Integer operator-(int lhs, const Integer& rhs) { return Integer{ lhs - rhs, rhs.value }; }
Integer operator-(int lhs, const Integer& rhs) { return Integer{ lhs - rhs.value }; }
2019.11.05
1刷 339
リスト4.17先頭
#include <iostream>
2019.11.05
1刷 342
リスト4.18 main()関数内
// OK。vector4dのフレンド関数である演算子オーバーロードが呼ばれる(②) vector4d b = v1 + v2;
// OK。vector4dのフレンド関数が呼ばれる(②) vector4d b = add(v1,v2);
2019.11.05
1刷 373
リスト7.14内
// DerivedAは仮想基底クラスとしてBaseを継承する class DerivedA : virtual public A { public: void method_DerivedA() { std::cout << "DerivedA: " << this << std::endl; } }; // DerivedBは仮想基底クラスとしてBaseを継承する class DerivedB : virtual public A { public: void method_DerivedB() { std::cout << "DerivedB: " << this << std::endl; } };
// DerivedAは仮想基底クラスとしてBaseを継承する class DerivedA : virtual public Base { public: void method_DerivedA() { std::cout << "DerivedA: " << this << std::endl; } }; // DerivedBは仮想基底クラスとしてBaseを継承する class DerivedB : virtual public Base { public: void method_DerivedB() { std::cout << "DerivedB: " << this << std::endl; } };
2019.11.05
1刷 397
リスト8.7内
out.open{"hello_file.txt", std::ios::out | std::ios::trunc};
out.open("hello_file.txt", std::ios::out | std::ios::trunc);
2019.11.05
1刷 399
リスト8.9 #include
#include <iostream> #include <fstream>
#include <iostream> #include <fstream> #include <string>
2019.11.05
1刷 401
リスト8.10
#include <fstream> int main() { std::ofstream out{"hello_binary.bin", std::ios::binary}; // 人間が文字として認識できない数値を直接出力 out.put(1); // ストリームが返されるのでこのように連続して呼ぶことができる out.put(2).put(3); out.close(); char a, b, c; std::ifstream in{"hello_binary.bin", std::ios::binary}; // 1バイトを直接入力 in.get(&a); in.get(&b).get(&c); // get()関数も同様に連続して呼べる std::cout << "a: " << a << std::endl; std::cout << "b: " << b << std::endl; std::cout << "c: " << c << std::endl; }
#include <fstream> #include <iostream> int main() { std::ofstream out{"hello_binary.bin", std::ios::binary}; // 人間が文字として認識できない数値を直接出力 out.put(1); // ストリームが返されるのでこのように連続して呼ぶことができる out.put(2).put(3); out.close(); char a, b, c; std::ifstream in{"hello_binary.bin", std::ios::binary}; // 1バイトを直接入力 in.get(a); in.get(b).get(c); // get()関数も同様に連続して呼べる std::cout << "a: " << a << std::endl; std::cout << "b: " << b << std::endl; std::cout << "c: " << c << std::endl; }
2019.11.05
1刷 426
リスト9.7 一番下
static_cast<Base&>(di).foo();
static_cast<Base&>(di).foo(0);
2019.11.05
1刷 432
リスト9.10内
// 2次元ベクトルクラスで明示的特殊化したテンプレート // 前方宣言があればプライマリテンプレートがなくても特殊化はできる template <> void show_vector(Vector v)
// 2次元ベクトルクラスで明示的特殊化したテンプレート // 前方宣言があればプライマリテンプレートがなくても特殊化はできる template <> void show_vector(Vec2 v)
2019.11.05
1刷 438
リスト9.14 fused_multiply_add関数内
return a * b + c
return a * b + c;
2019.11.05