C PlusPlus 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(C++からの技術)
(Cにもあった技術)
 
1行: 1行:
 +
[[メインページ#言語と開発環境|言語と開発環境]]へ戻る。
 +
 +
 
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner">
 
<table class="mbox-small" style="border:1px solid #aaa; background-color:#f9f9f9; width:22em;" id="RealTitleBanner">
 
<tr>
 
<tr>
 
<td style="width:1px;"></td>
 
<td style="width:1px;"></td>
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
+
<td class="mbox-text plainlist" style="">本来の表記は「<b><span id="RealTitle" style="font-size:large;">C++(Cpp)</span></b>」です。この記事に付けられた題名は{{記事名の制約}}から不正確なものとなっています。</td>
 
</tr>
 
</tr>
 
</table>
 
</table>
54行: 57行:
  
 
このC++の記事では、プログラムを実際に動かしてみて習得しようとすべき内容が多く含まれていますが、管理人はVisual Studio2012 Proを利用しています。したがってVisual Studio2012の基本的な利用方法を習得しているものとして、説明している節がいくつかあります。ときどき基本的ではないかもしれないと思う部分については、説明を付け加えていますが、サンプルプログラムの組み方が分からない人は、おそらくVisual Studioや各種開発環境の基本的な操作方法を習得していないことが起因していると思われます。Visual Studioの基本的な操作方法の記事はこのサイトで作成の予定ですが、基本的な操作手順について習得が必要な場合は、他サイトで習得するなりする必要があります。ご了承下さい。
 
このC++の記事では、プログラムを実際に動かしてみて習得しようとすべき内容が多く含まれていますが、管理人はVisual Studio2012 Proを利用しています。したがってVisual Studio2012の基本的な利用方法を習得しているものとして、説明している節がいくつかあります。ときどき基本的ではないかもしれないと思う部分については、説明を付け加えていますが、サンプルプログラムの組み方が分からない人は、おそらくVisual Studioや各種開発環境の基本的な操作方法を習得していないことが起因していると思われます。Visual Studioの基本的な操作方法の記事はこのサイトで作成の予定ですが、基本的な操作手順について習得が必要な場合は、他サイトで習得するなりする必要があります。ご了承下さい。
 +
*[[VC PlusPlus:基本的な使い方]]
  
 
+
==='''VisualStudio2019からstdafx.hは新規プロジェクト作成をしても生成されなくなりました。'''===
 
+
==='''VisualStudio2019からstdafx.hは新規プロジェクト作成をしても生成されくなりました。'''===
+
 
 サンプルプログラムの多くは過去のVisualStudioで作成し、VisualStudioは無料だし、きっとここの記事を読む人も同じ環境になっていると思っている節がありましたが、割かし、意外な変更がなされて、サンプルプログラムが動かなくなることがあるんだなと思いました。stdafx.hはもともとプリコンパイル済みヘッダファイルを纏めて記述しておくためのものだったのですが、Microsoftさんは「自分で作りなさい」っていうスタンスに変わったのかなと思います。以前だと、プロジェクトを作成すると自動でstdafx.hが作られ、main関数のあるファイルの先頭でstdafx.hがインクルードされていました。そして、stdafx.hファイルの中で主要なヘッダファイル(#include <stdio.h>とか<windows.h>とか)がさらにインクルードされていました。インクルードについては[[C ディレクティブ]]の記事を参照していただくとして、<span style = "background:linear-gradient(transparent 50%, #ff9ece 50%); font-weight:bold; ">stdafx.hがあるサンプルプログラムについては#include <cstdio>と書き換えておいてもらえれば、動作します。</span>有名なインクルードである#include <stdio.h>を使った場合でも動作しますが、stdio.hは古いヘッダファイルとなっています。むかしからある書籍のほとんどはstdio.hを読み込むような記述になっていますが、これからは#include <cstdio>を使った方がよいと思います。Windowsデスクトップウィザードというテンプレートを使ってプロジェクトを作成した場合、プリコンパイル済ヘッダファイルを使うという設定にするとpch.hというヘッダファイルが生成され、#include "pch.h"がmain関数のあるファイルの中で呼び出されるような形式になります。pch.hには何も新たにヘッダファイルを読み込む設定がなく、まったくの空のヘッダファイルになっています。自分で記述して作成することになっています。詳しくは、[[Cpp プリコンパイル済ヘッダーファイル]]の記事にも記載したいと思います。
 
 サンプルプログラムの多くは過去のVisualStudioで作成し、VisualStudioは無料だし、きっとここの記事を読む人も同じ環境になっていると思っている節がありましたが、割かし、意外な変更がなされて、サンプルプログラムが動かなくなることがあるんだなと思いました。stdafx.hはもともとプリコンパイル済みヘッダファイルを纏めて記述しておくためのものだったのですが、Microsoftさんは「自分で作りなさい」っていうスタンスに変わったのかなと思います。以前だと、プロジェクトを作成すると自動でstdafx.hが作られ、main関数のあるファイルの先頭でstdafx.hがインクルードされていました。そして、stdafx.hファイルの中で主要なヘッダファイル(#include <stdio.h>とか<windows.h>とか)がさらにインクルードされていました。インクルードについては[[C ディレクティブ]]の記事を参照していただくとして、<span style = "background:linear-gradient(transparent 50%, #ff9ece 50%); font-weight:bold; ">stdafx.hがあるサンプルプログラムについては#include <cstdio>と書き換えておいてもらえれば、動作します。</span>有名なインクルードである#include <stdio.h>を使った場合でも動作しますが、stdio.hは古いヘッダファイルとなっています。むかしからある書籍のほとんどはstdio.hを読み込むような記述になっていますが、これからは#include <cstdio>を使った方がよいと思います。Windowsデスクトップウィザードというテンプレートを使ってプロジェクトを作成した場合、プリコンパイル済ヘッダファイルを使うという設定にするとpch.hというヘッダファイルが生成され、#include "pch.h"がmain関数のあるファイルの中で呼び出されるような形式になります。pch.hには何も新たにヘッダファイルを読み込む設定がなく、まったくの空のヘッダファイルになっています。自分で記述して作成することになっています。詳しくは、[[Cpp プリコンパイル済ヘッダーファイル]]の記事にも記載したいと思います。
  
 
==='''Cにもあった技術'''===
 
==='''Cにもあった技術'''===
 +
[https://www.port70.net/~nsz/c/c11/n1570.html#7.1 C標準ライブラリ ヘッダーファイル一覧 Powered by port70.net]
 +
 +
[https://translate.google.co.jp/translate?hl=ja&tab=wT&sl=en&tl=ja&u=https%3A%2F%2Fport70.net%2F~nsz%2Fc%2Fc11%2F C標準ライブラリ ヘッダーファイル一覧 Powered by port70.net Google翻訳] n1570.htmlを閲覧すると良いです。難しめのC言語の全体の説明書になっています。
 +
[https://www.translatetheweb.com/?ref=TVert&from=&to=en&a=https%3A%2F%2Fport70.net%2F~nsz%2Fc%2Fc11%2Fn1570.html C標準ライブラリ ヘッダーファイル一覧 Powered by port70.net Bing翻訳]
 +
{| class="wikitable"
 +
|-
 +
| <assert.h> || <math.h> || <stdlib.h>
 +
|-
 +
| <complex.h> || <setjmp.h> || <stdnoreturn.h>
 +
|-
 +
| <ctype.h> || <signal.h> || <string.h>
 +
|-
 +
| <errno.h> || <stdalign.h> || <tgmath.h>
 +
|-
 +
| <fenv.h> || <stdarg.h> || <threads.h>
 +
|-
 +
| <float.h> || <stdatomic.h> || <time.h>
 +
|-
 +
| <inttypes.h> || <stdbool.h> || <uchar.h>
 +
|-
 +
| <iso646.h> || <stddef.h> || <wchar.h>
 +
|-
 +
| <limits.h> || <stdint.h> || <wctype.h>
 +
|-
 +
| <locale.h> || <stdio.h> ||
 +
|}
 +
 +
<span style="color:darkred;">★関連リンク★★★★★★★★★★★★★★★★★★★★★★★★★★★★</span>
 +
*[[Qt#Qtリファレンス|Qtリファレンス]]
 +
*[[Windows#MSVC_Runtimeリファレンス|MSVC Runtimeリファレンス]]
 +
 +
 +
<span style="color:darkred;">★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★</span>
 +
 
[[C プリプロセッサ]]<br />
 
[[C プリプロセッサ]]<br />
 
:[[C マクロ]]<br />
 
:[[C マクロ]]<br />
72行: 108行:
 
[[C 共有体]]<br />
 
[[C 共有体]]<br />
 
[[C ビットフィールド]]<br />
 
[[C ビットフィールド]]<br />
[[C ポインタ]]<br />
+
[[C ポインタ]] ポインタ技術だけで1冊の本がかけるくらい奥深い。<br />
 
[[C 関数ポインタ]]<br />
 
[[C 関数ポインタ]]<br />
 
[[C 文字列]]<br />
 
[[C 文字列]]<br />
96行: 132行:
  
  
 +
*[https://docs.microsoft.com/ja-jp/cpp/standard-library/cpp-standard-library-header-files?view=vs-2019 C++標準ライブラリ一覧 Powered by Microsoft]
 +
{| class="wikitable" style="white-space:nowrap;"
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | アルゴリズム
 +
| <algorithm> || <cstdlib><span style="vertical-align: super;">1-1</span> || <numeric> ||  ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | アトミック操作
 +
| <atomic><span style="vertical-align: super;">2-1</span> ||  ||  ||  ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="6" | Cライブラリラッパ
 +
| <cassert><span style="vertical-align: super;">3-1</span> || <ccomplex><span style="vertical-align: super;">4-1</span> || <cctype><span style="vertical-align: super;">5-1</span> || <cerrno> || <cfenv><span style="vertical-align: super;">6-1</span>
 +
|-
 +
| <cfloat><span style="vertical-align: super;">7-1</span> || <cinttypes><span style="vertical-align: super;">8-1</span> || <ciso646> || <climits><span style="vertical-align: super;">9-1</span> || <clocale>
 +
|-
 +
| <cmath><span style="vertical-align: super;">10-1</span> || <csetjmp><span style="vertical-align: super;">11-1</span> || <csignal><span style="vertical-align: super;">12-1</span> || <cstdalign> || <cstdarg><span style="vertical-align: super;">13-1</span>
 +
|-
 +
| <cstdbool> || <cstddef><span style="vertical-align: super;">14-1</span> || <cstdint><span style="vertical-align: super;">15-1</span> || <cstdio><span style="vertical-align: super;">16-1</span> || <cstdlib><span style="vertical-align: super;">1-2</span>
 +
|-
 +
| <cstring><span style="vertical-align: super;">17-1</span> || <ctgmath> || <ctime><span style="vertical-align: super;">18-1</span> || <cuchar><span style="vertical-align: super;">19-1</span> || <cwchar><span style="vertical-align: super;">20-1</span>
 +
|-
 +
| <cwctype><span style="vertical-align: super;">21-1</span> || || || || 
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 概念
 +
| <concepts> || || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | シーケンスコンテナ
 +
| <array> || <deque> || <forward_list> || <list> || <vector>
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 順序付けされた連想コンテナ
 +
| <map> || <set> || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 順序無しの連想コンテナ
 +
| <unordered_map> || <unordered_set> || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | コンテナアダプタ
 +
| <queue> || <stack> || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | コンテナビュー
 +
| &lt;span&gt; ||  || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | エラーと例外処理
 +
| <cassert><span style="vertical-align: super;">3-2</span> || <exception><span style="vertical-align: super;">22-1</span> || <stdexpect> || <system_error> ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="4" | 一般的なユーティリティ
 +
| <any> || <bitset> || <charconv> || <cstdlib><span style="vertical-align: super;">1-3</span> || <execution>
 +
|-
 +
| <functional> || <memory><span style="vertical-align: super;">23-1</span> || <memory_resource><span style="vertical-align: super;">24-1</span> || <optional> || <ratio><span style="vertical-align: super;">25-1</span>
 +
|-
 +
| <scoped_allocator> || <tuple> || <type_traits> || <typeindex> || <utility>
 +
|-
 +
| <variant> ||  ||  ||  || 
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="3" | I/Oと書式設定
 +
| <cinttypes><span style="vertical-align: super;">8-2</span> || <cstdio><span style="vertical-align: super;">16-2</span> || <filesystem> || <fstream> || <iomanip> 
 +
|-
 +
| <ios> || <iosfwd> || <iostream> || <istream> || <ostream> 
 +
|-
 +
| <sstream> || <streambuf> || <strstream> || <syncstream> || 
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | Iterators
 +
| <iterator> || || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 言語のサポート
 +
| <cfloat><span style="vertical-align: super;">7-2</span> || <climits><span style="vertical-align: super;">9-2</span> || <codecvt> || <compare> || <corroutine>
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="3" |ローカリゼーション
 +
| <csetjmp><span style="vertical-align: super;">11-2</span> || <csignal><span style="vertical-align: super;">12-2</span> || <cstdarg><span style="vertical-align: super;">13-2</span> || <cstddef><span style="vertical-align: super;">14-2</span>|| <cstdint><span style="vertical-align: super;">15-2</span>
 +
|-
 +
| <cstdlib><span style="vertical-align: super;">1-4</span> || <exception><span style="vertical-align: super;">22-2</span> || <initializer_list> || <limits><span style="vertical-align: super;">9-2</span> || <new><span style="vertical-align: super;">26-1</span>
 +
|-
 +
| <typeinfo> || <version> ||  || || 
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="2" |数値演算と数値
 +
| <bit> || <cfenv><span style="vertical-align: super;">6-2</span> || <cmath><span style="vertical-align: super;">10-2</span> || <complex><span style="vertical-align: super;">4-2</span> || <cstdlib><span style="vertical-align: super;">1-5</span>
 +
|-
 +
| <limits><span style="vertical-align: super;">9-3</span> || <nemeric> || <random> || <ratio><span style="vertical-align: super;">25-2</span> || <valarray>
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | メモリ管理
 +
| <allocators> || <memory><span style="vertical-align: super;">23-1</span> || <memory_resource><span style="vertical-align: super;">24-2</span> || <new><span style="vertical-align: super;">26-2</span> ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="2" |マルチスレッド
 +
| <atomic><span style="vertical-align: super;">2-2</span> || <condition_variable>|| <future> || <mutex> ||
 +
|-
 +
| <shared_mutex> || <thread>|| || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 範囲
 +
| <ranges> || || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 正規表現
 +
| <regex><span style="vertical-align: super;">27-1</span> || || || ||
 +
|-
 +
! style="white-space:nowrap; text-align:right;" rowspan="2" |文字列と文字データ
 +
| <cctype><span style="vertical-align: super;">5-2</span> || <cstdlib><span style="vertical-align: super;">1-6</span> || <cstring><span style="vertical-align: super;">17-2</span> || <cuchar><span style="vertical-align: super;">19-2</span> || <cwchar><span style="vertical-align: super;">20-2</span>
 +
|-
 +
| <cwctype><span style="vertical-align: super;">21-2</span> || <regex><span style="vertical-align: super;">27-2</span> || <string> || <string_view> || 
 +
|-
 +
! style="white-space:nowrap; text-align:right;" | 時刻
 +
| <chrono> || <ctime><span style="vertical-align: super;">18-2</span> || || ||
 +
|-
 +
|}
 +
※1-x~27-xの数字はカテゴリ別で重複しているヘッダファイルです。重複したヘッダファイル同士は同じ番号が付与されています。続く後ろの-の後ろの番号は同じヘッダファイルの通し番号です。
  
  
C言語をかるく勉強した程度の知識で上記の規格対応表にある新機能の説明を読んでもほとんど理解できないかもしれませんが、最初はわからなくても生きていけます。キニシナイ。こうなってるよ程度の説明です。上記のようなことを理解していくための本記事です。
+
 C言語をかるく勉強した程度の知識で上記の規格対応表にある新機能の説明を読んでもほとんど理解できないかもしれませんが、最初はわからなくても生きていけます。キニシナイ。こうなってるよ程度の説明です。上記のようなことを理解していくための本記事です。
  
 
□のついている項目は記事の中身が無いです。
 
□のついている項目は記事の中身が無いです。
106行: 243行:
 
標準入出力関数(cin cout << >> )に関する説明は省略します。
 
標準入出力関数(cin cout << >> )に関する説明は省略します。
  
 +
<span style="color:darkred;">★関連リンク★★★★★★★★★★★★★★★★★★★★★★★★★★★★</span>
 +
*[[Qt#Qtリファレンス|Qtリファレンス]]
 +
*[[Windows#MSVC_Runtimeリファレンス|MSVC Runtimeリファレンス]]
 +
 +
 +
<span style="color:darkred;">★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★</span>
 +
 +
 +
[[Cpp 範囲に基づく for文]]<br />
 
[[Cpp プリコンパイル済ヘッダーファイル]]
 
[[Cpp プリコンパイル済ヘッダーファイル]]
  
117行: 263行:
 
[[Cpp 引数規定値]]<br />
 
[[Cpp 引数規定値]]<br />
 
[[Cpp インライン関数]]………………………※定義部分に処理内容を記述<br />
 
[[Cpp インライン関数]]………………………※定義部分に処理内容を記述<br />
 +
[[Cpp 構造体 クラスの初期化]]………………………:で設定する方法<br />
 
[[Cpp クラス]]<br />
 
[[Cpp クラス]]<br />
 
[[Cpp クラス アクセス指定子]]<br />
 
[[Cpp クラス アクセス指定子]]<br />
133行: 280行:
 
[[Cpp クラス オーバーロード]]………………………※引数の違いによる呼び出し関数の決定。多重定義。<br />
 
[[Cpp クラス オーバーロード]]………………………※引数の違いによる呼び出し関数の決定。多重定義。<br />
 
[[Cpp クラス 継承]]……………………………………※クラスの基となるクラスから引き継ぐ形式のクラス<br />
 
[[Cpp クラス 継承]]……………………………………※クラスの基となるクラスから引き継ぐ形式のクラス<br />
[[Cpp クラス 継承 コンストラクタ]] □…………………※継承されたクラスのコンストラクタ<br />
+
[[Cpp クラス 継承 コンストラクタ]]…………………※継承されたクラスのコンストラクタ<br />
[[Cpp クラス 継承 デストラクタ]] □……………………※継承されたクラスのデストラクタ<br />
+
[[Cpp クラス 継承 アップキャスト]]……………………※派生クラスのポインタを基底クラスのポインタに変更できる<br />
[[Cpp クラス 多重継承]] □………………………………※複数のクラスが継承される形式のクラス:直列型および並列型<br />
+
[[Cpp クラス 仮想関数]] □………………………………※実行時に関数を再定義してもよい関数を基のクラスが指定し、再定義された関数の利用の決定をする<br />
+
[[Cpp クラス 抽象クラス]] □……………………………※必ず再定義する必要がある関数を基のクラスが指定している関数。純粋仮想関数。<br />
+
  
※仮想関数の関数をプログラマが記述する行為をオーバライドって言います。オーバロードは多重定義です。
+
↑※ポリモーフィズム(多態性・多相性・多様性:Polymorphism)と呼ばれる働きのために必要な仕組みです。
  
 +
[[Cpp クラス 仮想関数]]………………………………※実行時に関数を再定義してもよい関数を基のクラスが指定し、再定義された関数の利用の決定をする<br />
 +
 +
↑※仮想関数の関数をプログラマが記述する行為をオーバライドって言います。オーバロードは多重定義です。
 +
 +
[[Cpp クラス 継承 デストラクタ]]……………………※継承されたクラスのデストラクタ<br />
 +
[[Cpp クラス 抽象クラス]]……………………………※必ず再定義する必要がある関数を基のクラスが指定している関数。<span style="color:deeppink;">純粋仮想関数</span>。<br />
 +
[[Cpp クラス 多重継承]]………………………………※複数のクラスが継承される形式のクラス:直列型および並列型<br />
 
[[Cpp クラス 仮想基本クラス]] □………………………※クラスの継承によって2重に継承される問題を解決する<br />
 
[[Cpp クラス 仮想基本クラス]] □………………………※クラスの継承によって2重に継承される問題を解決する<br />
 
[[Cpp クラス フレンド]] □………………………………※フレンドで定義した関数やクラスは非公開の関数や変数にアクセスできる。<br />
 
[[Cpp クラス フレンド]] □………………………………※フレンドで定義した関数やクラスは非公開の関数や変数にアクセスできる。<br />
150行: 301行:
 
[[Cpp 演算子のオーバーロード]] □……………………※演算子の動作の追加定義<br />
 
[[Cpp 演算子のオーバーロード]] □……………………※演算子の動作の追加定義<br />
 
[[Cpp typeid演算子]] □…………………………………※実行時の型情報取得<br />
 
[[Cpp typeid演算子]] □…………………………………※実行時の型情報取得<br />
[[Cpp STL]] □……………………………………………※STL=Standard Template library 標準テンプレートライブラリ<br />
 
 
[[Cpp 例外処理]] □………………………………………※try throw catchによるエラー管理<br />
 
[[Cpp 例外処理]] □………………………………………※try throw catchによるエラー管理<br />
 
[[Cpp 名前マングリング]] □………………………………※名前空間で同名の関数を利用できるCpp独自の関数名生成、言語間利用時注意<br />
 
[[Cpp 名前マングリング]] □………………………………※名前空間で同名の関数を利用できるCpp独自の関数名生成、言語間利用時注意<br />
 +
[[Cpp STL]] □……………………………………………※STL=Standard Template library 標準テンプレートライブラリ<br />
  
 
==='''C++実装技術'''===
 
==='''C++実装技術'''===
 
[[Cpp クラス実装例]] □
 
[[Cpp クラス実装例]] □
 +
 +
 
 +
[[メインページ#言語と開発環境|言語と開発環境]]へ戻る。

2022年2月9日 (水) 00:00時点における最新版



個人用ツール
名前空間

変種
操作
案内
ツールボックス