C#は、Microsoftによって開発され、European Computer Manufacturers Association(ECMA)とInternational Standards Organization(ISO)によって承認された、モダンで汎用的なオブジェクト指向プログラミング言語です。 C#は、.Net Frameworkの開発中にAnders Hejlsbergと彼のチームによって開発されました。 C#はCommon Language Infrastructure(CLI)向けに設計されており、これは実行可能コードとランタイム環境で構成され、さまざまなハイレベル言語を異なるコ
CGIとは? Common Gateway Interface(CGI)は、Webサーバーとカスタムスクリプト間で情報を交換する方法を定義する一連の標準規格です。 CGI仕様は現在NCSAによって維持されています CGIは、HTTPサーバーなどの情報サーバーとインターフェースする外部ゲートウェイプログラムの標準です 現在のバージョンはCGI/1.1で、CGI/1.2が進行中です Webブラウジングの仕組み ハイパーリンクをクリックして特定のWebページやURLを閲覧するとき、以下の流れで処理されます。 ブラウザがHTTP Webサーバーに接続し、URL(ファイル名)を要求 Webサ
マルチスレッドはマルチタスクの一形態であり、マルチタスクとはコンピュータが2つ以上のプログラムを同時に実行できる機能です。一般的にマルチタスクには2種類あります:プロセスベースとスレッドベースです。 プロセスベースのマルチタスクは、プログラムの同時実行を扱います。スレッドベースのマルチタスクは、同一プログラムの異なる部分を同時に実行することを扱います。 マルチスレッドプログラムには、同時に実行できる2つ以上の部分が含まれます。このようなプログラムの各部分をスレッドと呼び、各スレッドは独立した実行パスを定義します。 C++自体にはマルチスレッドアプリケーションの組み込みサポートがありません
シグナルとは、オペレーティングシステムによってプロセスに送られる割り込みであり、プログラムを予期せず終了させる可能性があります。UNIX、Linux、macOS、WindowsシステムでCtrl+Cを押すことで割り込みを生成できます。 プログラムで捕捉できないシグナルもありますが、<csignal>ヘッダーファイルで定義されている以下のシグナルはプログラムで捕捉し、適切なアクションを取ることができます。 番号シグナルと説明 1SIGABRTabort呼び出しなどによるプログラムの異常終了 2SIGFPEゼロ除算やオーバーフローなどの不正な算術演算 3SIGILL不正な命
プリプロセッサとは、実際のコンパイルが始まる前に情報を前処理するようコンパイラに指示するディレクティブです。 すべてのプリプロセッサディレクティブは # で始まり、プリプロセッサディレクティブの前にはホワイトスペース文字のみが現れます。プリプロセッサディレクティブはC++文ではないため、セミコロン (;) で終わりません。 すべての例で #include ディレクティブを見てきました。このマクロはヘッダーファイルをソースファイルにインクルードするために使用されます。 C++では #include、#define、#if、#else、#line など、多くのプリプロセッサディレクティブがサポート
テンプレートはジェネリックプログラミングの基盤であり、特定の型に依存しない方法でコードを記述することを含みます。 テンプレートは、ジェネリックなクラスや関数を作成するための設計図または公式です。イテレータやアルゴリズムのようなライブラリコンテナは、ジェネリックプログラミングの例であり、テンプレート概念を使用して開発されています。 vector のような各コンテナには単一の定義しかありませんが、例えば vector <int> や vector <string> のように、さまざまな種類のベクトルを定義できます。 テンプレートを使用して関数とクラスの両方を定義できます。そ
同じクラスに同じ名前「Zara」の2人の生徒がいる状況を考えてみましょう。それらを区別するには、住んでいる地域が異なるなら地域名、または母親や父親の名前など、名前とともに追加情報を使用する必要があります。 同じ状況がC++アプリケーションでも発生し得ます。例えば、xyz() という関数を持つコードを書いていて、同じ関数 xyz() を持つ別のライブラリが利用可能な場合、コンパイラはあなたのコード内でどちらのバージョンの xyz() 関数を参照しているのか判断できません。 名前空間 はこの困難を克服するために設計され、異なるライブラリで利用可能な同じ名前の類似関数、クラス、変数などを区別するため
C++で動的メモリが実際にどのように機能するかをよく理解することは、優れたC++プログラマーになるために不可欠です。C++プログラムのメモリは2つの部分に分かれています: スタック : 関数内で宣言されたすべての変数はスタックからメモリを取得します。 ヒープ : プログラムの未使用メモリであり、プログラム実行時に動的にメモリを割り当てるために使用できます。 多くの場合、定義済み変数に特定の情報を格納するためにどれだけのメモリが必要かを事前に知ることはできず、必要なメモリサイズは実行時に決定されることがあります。 実行時にヒープ内で、与えられた型の変数のためにメモリを割り当てるには、割り当て
例外とは、プログラム実行中に発生する問題です。C++の例外は、プログラム実行中に発生する例外的な状況(ゼロ除算の試みなど)への対応です。 例外は、プログラムのある部分から別の部分へ制御を移す方法を提供します。C++の例外処理は、try、catch、throw の3つのキーワードに基づいて構築されています。 throw : 問題が発生したときにプログラムが例外をスローします。これは throw キーワードを使用して行います。 catch : プログラムの問題を処理したい場所で、例外ハンドラを使用して例外をキャッチします。catch キーワードは例外の捕捉を示します。 try : 特定の例外が有
これまで、標準入力からの読み取りに cin、標準出力への書き込みに cout メソッドを提供する iostream 標準ライブラリを使用してきました。 このチュートリアルでは、ファイルからの読み書き方法を学びます。これには fstream という別の標準C++ライブラリが必要で、以下の3つの新しいデータ型を定義します: No.データ型と説明 1ofstream出力ファイルストリームを表し、ファイルの作成とファイルへの情報書き込みに使用。 2ifstream入力ファイルストリームを表し、ファイルからの情報読み取りに使用。 3fstream一般的なファイルストリームを表し、ofstreamとif
インターフェースとは、特定の実装にコミットすることなく、C++クラスの振る舞いや能力を記述するものです。 C++のインターフェースは 抽象クラス を使用して実装され、これらの抽象クラスを、関連データから実装詳細を分離する概念であるデータ抽象化と混同すべきではありません。 クラスの関数の少なくとも1つを 純粋仮想 関数として宣言することで、クラスを抽象クラスにします。純粋仮想関数は、宣言時に = 0 を指定します: class Box { public: // 純粋仮想関数 virtual double getVolume() = 0; private: double l
すべてのC++プログラムは以下の2つの基本要素で構成されています: プログラム文(コード) : プログラムのアクションを実行する部分で、関数と呼ばれます。 プログラムデータ : プログラムの情報であり、プログラム関数によって影響を受けます。 カプセル化は、データとそれを操作する関数を結合し、両方を外部からの干渉と誤用から守るオブジェクト指向プログラミングの概念です。データカプセル化は、重要なOOP概念である データ隠蔽 をもたらしました。 データカプセル化 は、データとそれを使用する関数をバンドルするメカニズムであり、データ抽象化 はインターフェースのみを公開し、実装詳細をユーザーから隠蔽
データ抽象化とは、外部世界に必要な情報のみを提供し、背景の詳細を隠蔽すること、つまり、詳細を提示せずにプログラムで必要な情報を表現することを指します。 データ抽象化は、インターフェースと実装の分離に依存するプログラミング(および設計)技法です。 テレビを実例として考えてみましょう。テレビの電源を入れたり切ったり、チャンネルを変えたり、音量を調整したり、スピーカー、VCR、DVDプレーヤーなどの外部コンポーネントを追加したりできます。しかし、その内部の詳細は知りません。つまり、電波やケーブルでどのように信号を受信し、どのように変換し、最終的に画面に表示するかは知りません。 したがって、テレビは内
ポリモーフィズム(多態性) とは、多くの形を持つことを意味します。通常、ポリモーフィズムはクラスの階層があり、それらが継承によって関連付けられているときに発生します。 C++のポリモーフィズムとは、メンバ関数の呼び出しが、その関数を呼び出すオブジェクトの型に応じて、異なる関数を実行することを意味します。 基底クラスが他の2つのクラスによって派生されている例を考えます: Live Demo #include <iostream> using namespace std; class Shape { protected: int width, height; public:
C++では、同じスコープ内で 関数 名または 演算子 に複数の定義を指定できます。これはそれぞれ 関数オーバーロード と 演算子オーバーロード と呼ばれます。 オーバーロードされた宣言とは、同じスコープ内で以前に宣言された宣言と同じ名前を持ちますが、引数が異なり、明らかに異なる定義(実装)を持つ宣言のことです。 オーバーロードされた 関数 または 演算子 を呼び出すと、コンパイラは関数や演算子の呼び出しに使用した引数の型を、定義内で指定されたパラメータ型と比較することで、最も適切な定義を決定します。最も適切なオーバーロード関数や演算子を選択するこのプロセスを オーバーロード解決 と呼びます。
C/C++の配列を使用すると、同じ種類のデータ項目をいくつか組み合わせた変数を定義できますが、構造体 は異なる種類のデータ項目を組み合わせることができる、別のユーザー定義データ型です。 構造体はレコードを表現するために使用されます。例えば、図書館の本を管理したいとします。各本について以下の属性を追跡したいかもしれません: タイトル 著者 主題 書籍ID 構造体の定義 構造体を定義するには、struct 文を使用する必要があります。struct 文は、複数のメンバを持つ新しいデータ型をプログラムに定義します。struct 文の形式は以下の通りです: struct [structure tag
C++標準ライブラリは適切な日付型を提供していません。C++は日付と時刻操作のための構造体と関数をC言語から継承しています。C++プログラムで日付と時刻関連の関数や構造体にアクセスするには、<ctime> ヘッダーファイルをインクルードする必要があります。 時間関連の型は4つあります:clock_t、time_t、size_t、tm。clock_t、size_t、time_t 型は、システム時刻と日付を何らかの整数として表現できます。 構造体型 tm は、以下の要素を持つC構造体の形で日付と時刻を保持します: struct tm { int tm_sec; // 0〜6
参照変数とは、すでに存在する変数の別名、つまりエイリアスです。一度参照が変数で初期化されると、変数名または参照名のどちらを使ってもその変数を参照できます。 参照 vs ポインタ 参照はしばしばポインタと混同されますが、参照とポインタには3つの主要な違いがあります: NULL参照を持つことはできません。参照が正当なストレージに接続されていると常に想定できる必要があります。 一度オブジェクトに初期化された参照を、別のオブジェクトを参照するように変更することはできません。ポインタはいつでも別のオブジェクトを指せます。 参照は作成時に初期化されなければなりません。ポインタはいつでも初期化できます。
C++には以下の2種類の文字列表現があります: Cスタイル文字列 標準C++で導入された string クラス型 Cスタイル文字列 Cスタイル文字列はC言語で誕生し、C++でも引き続きサポートされています。この文字列は実際には、null 文字 \0 で終了する1次元の文字配列です。したがって、null終端文字列は、文字列を構成する文字に続いて null が続きます。 以下の宣言と初期化は、Hello という単語で構成される文字列を作成します。配列の末尾に null 文字を保持するため、文字列 Hello の文字数より1つ大きいサイズの文字配列が必要です。 char greeting[6]
通常、数値を扱うときは、int、short、long、float、double などのプリミティブデータ型を使用します。数値データ型、取りうる値、数値範囲については、C++データ型の説明時に解説済みです。 C++での数値定義 前の章のさまざまな例ですでに数値を定義してきました。ここでは、C++でさまざまなタイプの数値を定義する統合例を示します: Live Demo #include <iostream> using namespace std; int main () { // 数値定義: short s; int i; long l; f
C言語