C++樹林– category –
-
【C++】クラスの基本的な使い方まとめ(定義→オブジェクト作成→メンバアクセス)
はじめに C++のクラスは、オブジェクト指向プログラミングの基本となる「設計図」です。この設計図を実際にプログラムで活用するには、決まった手順を踏む必要があります。 この記事では、C++のクラスを利用するための基本的な流れを、以下の3つのステップ... -
【C++】クラス(class)とは?オブジェクト指向の基本を初心者向けに解説
はじめに オブジェクト指向プログラミング(OOP)の中心的な概念が「クラス (class)」です。クラスは、現実世界の「モノ」が持つ**状態(データ)と振る舞い(機能)**を、プログラムの中で一つのまとまりとして表現するための「設計図」と考えることがで... -
【C++/C言語】共用体 (union) の使い方 | 同じメモリ領域を共有する仕組み
はじめに C++の構造体(struct)は、全てのメンバ変数がそれぞれ個別のメモリ領域を持ちます。一方、「共用体 (union)」は、定義された全てのメンバ変数が、一つの同じメモリ領域を共有(共用)するという、特殊な性質を持っています。 これは、複数のデー... -
【C++】関数に構造体を渡す3つの方法(値渡し、ポインタ渡し、参照渡し)
はじめに C++で、関数の中で構造体のデータを利用したい場合、どのようにしてそのデータを関数に渡せばよいでしょうか? C++には、主に3つの方法があり、それぞれにメリットとデメリットがあります。 値渡し (Pass by Value): 構造体のコピーを作成して渡... -
【C++】構造体(struct)入門 | 型の定義から初期化、代入までを徹底解説
はじめに プログラミングで、「学生」の情報を管理したい場合、「学生番号(int型)」、「氏名(string型)」、「平均点(double型)」のように、複数の異なるデータが関連し合っています。これらの変数をバラバラに管理するのは非効率です。 C++の「構造... -
【C++】列挙型 (enum) の使い方 | 整数に分かりやすい名前を付ける方法
はじめに プログラムの中で、信号の色(赤・黄・青)や、曜日(日・月・火…)のように、互いに関連する一連の定数を扱いたい場合があります。これらの状態を、0, 1, 2 のような単なる整数(マジックナンバー)で管理すると、コードを読む人が「0 が赤だっ... -
【C++/C言語】typedef とは?既存のデータ型に別名を付けて分かりやすくする方法
はじめに C++やC言語でプログラミングをしていると、unsigned long long int のように、データ型名が非常に長くなってしまうことがあります。また、「年齢」を格納する int と、「ID」を格納する int のように、同じデータ型でもプログラム内での「意味」... -
【C++】子クラスから、オーバーライドされた親クラスのメンバ関数を呼び出す方法
はじめに C++の継承において、子クラス(派生クラス)で親クラス(基底クラス)のメンバ関数をオーバーライドすると、子クラスのオブジェクトからは、デフォルトで子クラス側の関数が呼び出されます。 しかし、時には「子クラス独自の処理に加えて、親クラ... -
【C++】継承したメンバ関数をオーバーライドする方法とvirtualキーワードの役割
はじめに C++の継承では、子クラス(派生クラス)は親クラス(基底クラス)の機能を引き継ぎます。しかし、時には「親クラスの機能の一部を、子クラス独自の振る舞いに**上書き(変更)**したい」という場面があります。 このように、親クラスから継承した... -
Pythonで数当てゲームを作ろう:初心者向けプロジェクトで学ぶ基本
プログラミングの学習は、実際に何かを作りながら進めるのが一番効果的です。この記事では、Pythonの基本的な構文(変数、ループ、条件分岐)をすべて使って、シンプルな数当てゲームを作成します。 このプロジェクトを通して、複数の知識を組み合わせ、一... -
【C++】ソースファイルの分割方法 | ヘッダーファイル(.h)とソースファイル(.cpp)の役割
はじめに C++でプログラムが大きくなってくると、全てのコードを一つのmain.cppファイルに記述するのは非効率で、管理も大変になります。オブジェクト指向プログラミングでは、クラスや関連する関数を、機能ごとにファイルに分割するのが一般的です。 この... -
【C++】new[]とdelete[]で動的配列を確保・解放する方法
はじめに C++で配列を宣言する際、int data[10]; のように、そのサイズは通常、プログラムを書く時点(コンパイル時)で決まっている必要があります。しかし、プログラムを実行し、ユーザーからの入力を受け取るまで、配列の大きさが分からないという場面... -
【C++】newとdeleteで動的なメモリ確保・解放を行う方法
はじめに C++で変数を宣言すると、通常、その変数は関数が終了すると同時にメモリ上から消滅します。しかし、プログラムの実行中に「必要な時に必要な分だけ、メモリを確保したい」という場面があります。 このような、プログラムの実行時(ランタイム)に... -
【C++】変数の記録寿命(スコープとライフタイム)を理解する static の使い方
はじめに C++の変数は、宣言された場所(スコープ)だけでなく、その値がメモリ上にどれくらいの期間存在し続けるかという「記録寿命(ライフタイム)」の概念を持っています。 例えば、関数の中で宣言された通常の変数は、関数が終了すると同時に消滅しま... -
【C++】変数のスコープとは?グローバル変数とローカル変数の違いを解説
はじめに C++プログラミングにおいて、変数を宣言する「場所」は非常に重要です。なぜなら、変数が宣言された場所によって、その変数がプログラムのどこからアクセスできるかという有効範囲が決まるからです。この有効範囲のことを「スコープ (scope)」と... -
【C++】継承におけるコンストラクタとデストラクタの呼び出し方を完全解説
はじめに C++の継承では、子クラスのオブジェクトが作られるとき、まず親クラスの部分が作られ、その後に子クラスの部分が作られます。この構築プロセスを制御するのがコンストラクタです。逆に、オブジェクトが破棄されるときは、子クラスの部分が先に片... -
【C++】継承におけるコンストラクタとデストラクタの呼び出し順序
はじめに C++の継承において、コンストラクタとデストラクタは子クラスに継承されません。これらは、そのクラスのオブジェクトが生成・破棄される際の固有の処理であるため、各クラスが自身のものを持つ必要があります。 しかし、子クラスのオブジェクトが... -
【C++】オブジェクト指向における「汎化」と「継承」の関係を解説
はじめに オブジェクト指向設計の初期段階では、システムに必要な「モノ」をクラスとして洗い出していきます。その過程で、複数の異なるクラスが、実は多くの共通した性質(データや操作)を持っていることに気づくことがあります。 この、「複数のクラス... -
【C++】継承で使う protected とは?public / private との違いを解説
はじめに C++のクラスには、メンバへのアクセスを制御するための3つのアクセス指定子があります。 public: 誰でもアクセス可能(公開) private: そのクラスの内部からのみアクセス可能(非公開) protected: そのクラスの内部、およびそのクラスを継承し... -
【C++】クラスの継承入門 | 既存のクラスを再利用して新しいクラスを作る方法
はじめに オブジェクト指向プログラミングの三本柱の一つである「継承 (Inheritance)」は、既にあるクラスの機能(メンバ変数やメンバ関数)を受け継いで、新しいクラスを定義するための強力な仕組みです。 例えば、「乗り物」という基本的なクラスがあれ... -
【C++】デストラクタとは?オブジェクトが消滅する時の自動後片付け処理
はじめに C++のコンストラクタが、オブジェクトが「生まれる」瞬間に自動で呼ばれる初期化処理であるのに対し、「デストラクタ (Destructor)」は、オブジェクトがメモリ上から「消滅する」直前に自動で呼び出される、後片付けのための特別なメンバ関数です... -
【C++】コンストラクタのオーバーロード入門 | オブジェクトの作り方を複数用意する方法
はじめに C++のコンストラクタは、オブジェクトが生成される際に自動で呼び出され、メンバ変数の初期化を行います。通常の関数と同様に、この**コンストラクタもオーバーロード(overload)**することが可能です。 コンストラクタをオーバーロードすること... -
【C++】コンストラクタとは?オブジェクトの初期化を自動化する方法
はじめに C++のクラスからオブジェクトを作成する際、メンバ変数を一つずつ手動で設定するのは手間がかかり、また設定し忘れると、変数が不定な値(ごみデータ)のまま使われてしまう危険性があります。 このような初期化の手間とミスを防ぐために、C++に... -
【C++】カプセル化の2大活用パターン | データ保護と実装の隠蔽
はじめに オブジェクト指向の基本原則である「カプセル化」は、単にデータを private にして隠すだけではありません。その真の目的は、クラスを安全で使いやすい「部品」として成立させることにあります。 カプセル化の活用法は、大きく以下の2つのパター... -
【C++】カプセル化とは?public, private, protected の違いと使い方
はじめに オブジェクト指向プログラミングの三本柱の一つである「カプセル化 (Encapsulation)」は、**データ(メンバ変数)と、それを操作する手続き(メンバ関数)**を一つにまとめ、重要なデータを外部から守るための仕組みです。 C++では、アクセス指定... -
【C++】クラスのオブジェクトをポインタで関数に渡す/関数から返す方法
はじめに C++のクラスから生成したオブジェクトは、関数の引数として渡したり、関数の戻り値として返したりすることができます。構造体の場合と同様に、ここでもポインタを利用するのが、効率的で一般的な手法です。 オブジェクトそのものをコピーして渡す... -
【C++/C言語】C言語スタイルの文字列を操作する標準ライブラリ関数 (strlen, strcpy, strcat)
はじめに C++やC言語で、char配列を使ったC言語スタイルの文字列を扱う際、文字列の長さを取得したり、コピーや連結を行ったりする基本的な操作が頻繁に必要になります。これらの操作を自力で実装するのは大変ですが、標準ライブラリの <cstring> (C... -
【C++/C言語】C言語スタイルの文字列を1文字ずつループ処理する方法
はじめに C++やC言語におけるC言語スタイルの文字列(C-style string)は、内部的には終端NULL文字 ('\0') で終わる文字 (char) の配列です。この「必ず \0 で終わる」という特性を利用することで、文字列の長さを事前に知らなくても、forループやwhileル... -
【C++/C言語】ポインタ (const char*) と配列 (char[]) の違いを徹底解説
はじめに C++やC言語でC言語スタイルの文字列を扱う際、非常によく似た2つの方法があります。 ポインタを使う方法: const char* ptr = "テキスト"; 配列を使う方法: char arr[100]; これらは似て非なるもので、その挙動の違いを理解しないまま使うと、予期... -
【C++/C言語】文字列リテラルをポインタ const char* で扱う方法
はじめに C++やC言語において、"Welcome" のような、ダブルクォーテーションで囲まれた文字列(文字列リテラル)は、プログラムの特別な読み取り専用メモリ領域に格納されます。 このような文字列リテラルをプログラムで扱う際、その文字列が格納されてい...