-
C++樹林
【C++】コンストラクタとは?オブジェクトの初期化を自動化する方法
はじめに C++のクラスからオブジェクトを作成する際、メンバ変数を一つずつ手動で設定するのは手間がかかり、また設定し忘れると、変数が不定な値(ごみデータ)のまま使われてしまう危険性があります。 このような初期化の手間とミスを防ぐために、C++に... -
C++樹林
【C++】カプセル化の2大活用パターン | データ保護と実装の隠蔽
はじめに オブジェクト指向の基本原則である「カプセル化」は、単にデータを private にして隠すだけではありません。その真の目的は、クラスを安全で使いやすい「部品」として成立させることにあります。 カプセル化の活用法は、大きく以下の2つのパター... -
C++樹林
【C++】カプセル化とは?public, private, protected の違いと使い方
はじめに オブジェクト指向プログラミングの三本柱の一つである「カプセル化 (Encapsulation)」は、**データ(メンバ変数)と、それを操作する手続き(メンバ関数)**を一つにまとめ、重要なデータを外部から守るための仕組みです。 C++では、アクセス指定... -
C++樹林
【C++】クラスのオブジェクトをポインタで関数に渡す/関数から返す方法
はじめに C++のクラスから生成したオブジェクトは、関数の引数として渡したり、関数の戻り値として返したりすることができます。構造体の場合と同様に、ここでもポインタを利用するのが、効率的で一般的な手法です。 オブジェクトそのものをコピーして渡す... -
C++樹林
【C++/C言語】C言語スタイルの文字列を操作する標準ライブラリ関数 (strlen, strcpy, strcat)
はじめに C++やC言語で、char配列を使ったC言語スタイルの文字列を扱う際、文字列の長さを取得したり、コピーや連結を行ったりする基本的な操作が頻繁に必要になります。これらの操作を自力で実装するのは大変ですが、標準ライブラリの <cstring> (C... -
C++樹林
【C++/C言語】C言語スタイルの文字列を1文字ずつループ処理する方法
はじめに C++やC言語におけるC言語スタイルの文字列(C-style string)は、内部的には終端NULL文字 ('\0') で終わる文字 (char) の配列です。この「必ず \0 で終わる」という特性を利用することで、文字列の長さを事前に知らなくても、forループやwhileル... -
C++樹林
【C++/C言語】ポインタ (const char*) と配列 (char[]) の違いを徹底解説
はじめに C++やC言語でC言語スタイルの文字列を扱う際、非常によく似た2つの方法があります。 ポインタを使う方法: const char* ptr = "テキスト"; 配列を使う方法: char arr[100]; これらは似て非なるもので、その挙動の違いを理解しないまま使うと、予期... -
C++樹林
【C++/C言語】文字列リテラルをポインタ const char* で扱う方法
はじめに C++やC言語において、"Welcome" のような、ダブルクォーテーションで囲まれた文字列(文字列リテラル)は、プログラムの特別な読み取り専用メモリ領域に格納されます。 このような文字列リテラルをプログラムで扱う際、その文字列が格納されてい... -
C++樹林
【C++/C言語】文字列と文字配列の関係 | 終端NULL文字の重要性
はじめに C++やC言語において、"Hello" のような文字列リテラルは、内部的には文字 (char) の配列として扱われます。 この文字配列には特別なルールがあります。それは、文字列の最後に必ず「終端NULL文字」という、「ここで文字列は終わりです」と示すマ... -
C++樹林
【C++】クラスの配列とポインタの使い方を解説
はじめに C++のクラス(class)は、オブジェクトの「設計図」です。この設計図から、複数のオブジェクト(実体)をまとめて管理したい場合や、オブジェクトを間接的に操作したい場合があります。 int型に配列 (int arr[10];) やポインタ (int* p;) がある... -
C++樹林
【C++】関数のオーバーロード活用の2大パターン(引数の型・数の違い)
はじめに C++の関数のオーバーロードは、「同じ名前で、引数リストが異なる関数を複数定義できる」機能です。この「引数リストが異なる」という条件は、主に2つのパターンに分類できます。 引数のデータ型が異なるパターン 引数の個数が異なるパターン こ... -
C++樹林
【C++】関数のオーバーロード入門 | 同じ名前の関数を複数定義する方法
はじめに C++の強力な機能の一つに、「関数のオーバーロード (overload)」があります。これは、一つのクラス(またはスコープ)の中に、同じ名前を持つ関数を複数定義することができる仕組みです。 例えば、数値を表示する print という関数を作りたい場合... -
C++樹林
【C++】オブジェクト指向の三本柱「カプセル化・継承・多態性」を分かりやすく解説
はじめに オブジェクト指向プログラミング(OOP)は、単にクラスを使ってデータと操作をまとめるだけではありません。その真価は、「オブジェクト指向の三本柱」とも呼ばれる、以下の3つの強力な概念を理解し、活用することで発揮されます。 カプセル化 (E... -
C++樹林
【C++】クラス定義とメンバ関数の実装(分離/インライン/単一ファイル)
はじめに C++のクラスは、データ(メンバ変数)と操作(メンバ関数)をまとめた「設計図」です。このクラスを実際にプログラムで利用するには、まずクラスを定義し、次にそのメンバ関数の具体的な処理内容を実装する必要があります。 メンバ関数の実装には... -
C++樹林
【C++】クラスの定義とメンバ関数の実装方法を解説
はじめに C++のオブジェクト指向プログラミングの核となるのが「クラス (class)」です。クラスは、関連するデータ(メンバ変数)と、それらを操作するための一連の関数(メンバ関数)を一つにまとめた、独自のデータ型の「設計図」です。 この記事では、C+... -
C++樹林
【C++】クラスを使ったオブジェクト指向入門(じゃんけんゲーム作成)
はじめに プログラミングには、処理の「手順」を重視する「手続き型」と、現実世界の「モノ」に対応させて部品化する「オブジェクト指向」という考え方があります。C++は、後者のオブジェクト指向プログラミング(OOP)を強力にサポートする言語です。 OOP... -
C++樹林
オブジェクト指向プログラミング(OOP)とは?そのメリットを初心者向けに解説
はじめに プログラミングの世界には、「オブジェクト指向プログラミング(Object-Oriented Programming, OOP)」という、特に大規模で複雑なソフトウェアを開発する際に不可欠となる、非常に重要な考え方があります。 C++やJava, Python, C#といった多くの... -
C++樹林
【C言語】手続き型プログラミングで「じゃんけんゲーム」を作成する方法
はじめに プログラミングの考え方には、大きく分けて「手続き型プログラミング」と「オブジェクト指向プログラミング」の2つがあります。C言語は、前者の「手続き型プログラミング言語」の代表例です。 手続き型プログラミングとは、プログラムを**一連の... -
C++樹林
【C++/C言語】関数から構造体のポインタを返す方法とstaticの重要性
はじめに C++やC言語で、関数の中で作成した構造体の情報を、呼び出し元のmain関数などで利用したい場合があります。そのようなとき、関数から**構造体を指すポインタを返す(returnする)**という方法があります。 しかし、これには大きな落とし穴があり... -
C++樹林
【C++/C言語】関数に構造体をポインタで渡す方法(値渡しとの違い)
はじめに C++やC言語で、ある関数の中で構造体のデータを使いたい場合、どのようにして関数にそのデータを渡せばよいでしょうか?一つの方法は構造体全体をコピーして渡す「値渡し」ですが、構造体が大きい場合、コピーのコストが無視できなくなります。 ... -
C++樹林
【C++/C言語】構造体のポインタとアロー演算子(->)の使い方
はじめに C++やC言語で、ポインタを使って構造体のメンバにアクセスするには、どうすればよいのでしょうか? 前回、構造体を指すポインタを宣言し、既存の変数のアドレスを代入する方法を学びました。今回は、そのポインタを通じて、指し示している先の構... -
C++樹林
【C++/C言語】構造体のポインタ入門 | アドレスの取得(&)とメンバへのアクセス
はじめに C++やC言語のパワフルな機能の一つに「ポインタ」があります。ポインタは、変数が格納されているメモリ上のアドレスを保持するための特殊な変数です。 構造体に対しても、このポインタを利用することができます。「構造体を指すポインタ」を宣言... -
C++樹林
【C++/C言語】構造体のメンバに「構造体の配列」を持たせる方法
はじめに C++やC言語の構造体(struct)は、入れ子(ネスト)にすることで複雑なデータ構造を表現できます。その応用として、構造体のメンバとして、別の構造体の「配列」を持つことも可能です。 これにより、「クラス」が「生徒の配列」を持つ、「部署」... -
C++樹林
【C++/C言語】構造体の配列の使い方 | 複数のレコードをまとめて管理する方法
はじめに C++やC言語の構造体(struct)は、関連するデータを一つにまとめるのに便利ですが、その真価は配列と組み合わせることでさらに発揮されます。 「社員」の構造体を定義した後、その構造体をデータ型とする配列を宣言すれば、「全社員のデータ」を... -
C++樹林
【C++/C言語】構造体の全メンバを = で一括コピー(代入)する方法
はじめに C++やC言語の構造体(struct)で、ある変数の内容を、別の変数にそっくりそのままコピーしたい場合があります。メンバを一つずつ destination.id = source.id; のようにコピーしていくことも可能ですが、メンバの数が多いと非常に手間がかかりま... -
C++樹林
【C++/C言語】構造体の入れ子(ネスト)の使い方 | 複雑なデータを構造化する方法
はじめに C++やC言語の構造体(struct)は、関連する変数を一つにまとめる便利な機能ですが、その真価は**入れ子(ネスト)**にすることで、さらに発揮されます。 「会社」という大きな構造体の中に、「社員」という別の構造体を複数持たせる、といったよ... -
C++樹林
【C++/C言語】構造体は「型」と「変数(実体)」の違いを理解しよう
はじめに C++やC言語で構造体(struct)を学び始めると、しばしば「型」と「変数(実体)」の概念で混乱が生じることがあります。struct の定義は、あくまで「こういう部品を組み合わせた、新しいデータ型を作りますよ」という設計図を作る作業にすぎませ... -
C++樹林
【C++/C言語】構造体 (struct) の使い方入門!複数の変数を一つにまとめる方法
はじめに C++やC言語でプログラミングをする際、例えば「商品」の情報を管理するために、productID(商品ID)、productName(商品名)、price(価格)といった、関連性の高い複数の変数を個別に宣言するのは非効率です。 このような、互いに強く関連する複... -
VBA樹林
【VBA】ファイルの拡張子に関連付けられたプログラムのパスを取得する方法 (API)
はじめに VBAマクロから特定のファイルを開く際、通常は Shell 関数に直接ファイルパスを渡せば、Windowsが自動的に関連付けられたプログラムで開いてくれます。しかし、「.pdf ファイルを開くプログラムが何であるか(Acrobat Readerなのか、ブラウザなの... -
VBA樹林
【VBA】マクロの処理をミリ秒(ms)単位で一時停止する方法 (Sleep API)
はじめに VBAでマクロを実行する際、「処理が速すぎて、何が起きているか目で追えない」「特定の処理の間に、ほんの少しだけウェイト(待ち時間)を入れたい」といった場面があります。 VBAには Application.Wait という待機命令がありますが、これは秒単...