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

独習C++ 新版 新刊

監修

形式:
電子書籍
発売日:
ISBN:
9784798164571
価格:
本体3,380円+税
シリーズ:
独習

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

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

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

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

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

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

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

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

付属データはこちら

会員特典はこちら

書籍への問い合わせ

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

書影の利用許諾について

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

追加情報はありません。

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

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

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

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

書籍の種類:

書籍の刷数:

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

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

最終更新日:2019年11月26日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
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刷 082
[構文]クラスメンバーのアクセス指定子:1行目
class /class-name/
class class-name
2019.11.26
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刷 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