-
C++のスコープ解決演算子(::)とは?使い方をサンプルコード付きで解説
C++におけるスコープ解決演算子「::」は、特定のスコープに属する名前へ明示的にアクセスするための重要な演算子です。たとえば、グローバル変数と同じ名前のローカル変数が存在する場合、通常はローカル変数が優先されますが、「::変数名」と記述することでグローバル変数を呼び出せます。また、クラスの外部でメンバ関数を定義するときや、クラスのstaticメンバ変数にアクセスするときにも使用されます。 スコープ解決演算子の主な用途 同名のグローバル変数へのアクセス:ローカル変数によって隠蔽されたグローバル変数を参照できます。 クラス外でのメンバ関数の定義:「戻り値の型 クラス名::関数名()」の形式で、
-
C/C++におけるstrncmp()とstrcmp()の違いを徹底解説
strncmp()とはstrncmp()は、指定された文字数まで左側の文字列と右側の文字列を比較するための関数です。基本的な動作はstrcmp()と同じですが、「比較する最大文字数」を引数で指定できる点が大きな特徴です。戻り値は以下のように決まります。比較した位置の文字同士がすべて等しい場合(または指定文字数内で差が出なかった場合):0左側の文字列の文字が、右側の対応する文字より大きいASCII値を持つ場合:0より大きい値左側の文字列の文字が、右側の対応する文字より小さいASCII値を持つ場合:0より小さい値C言語におけるstrncmp()の構文は次のとおりです。int strncmp(con
-
C++17の新機能とは?主な変更点と追加機能をわかりやすく解説
C++17は、2017年に策定された標準C++言語のバージョンです。前バージョンにあたるのはC++11とC++14です。C++17では、コア言語に多数の機能が追加された一方で、一部の旧機能は削除されました。必要な機能が一通り揃った「フィーチャーコンプリート(feature complete)」な規格としても知られています。 ここからは、C++17で導入された主な新機能・変更点を見ていきましょう。 ライブラリの変更点 ― ユーティリティ(utils) C++17の最も注目すべき特徴の一つが、他のライブラリの機能やパターンを統合した点です。これまで個別に提供されていた多くのサブライブラリが、標準規
-
C++におけるi++と++iの違い:前置インクリメントと後置インクリメントの使い分け
インクリメント演算子は、変数の値を1つ増やすために使用される演算子です。一方、デクリメント演算子はその逆の働きをし、値を1つ減らします。前置インクリメントと後置インクリメントの基本前置インクリメント(++i) ― 変数の値が使用される前に、値が1増加します。後置インクリメント(i++) ― 変数の値が使用された後に、値が1増加します。C++における i++ および ++i の構文は次のとおりです。++variable_name; // 前置インクリメント(Pre-increment)variable_name++; // 後置インクリメント(Post-increment)ここで、variabl
-
Windowsで使えるおすすめC++ IDE・エディター6選
Windows環境でC++開発を行う際に役立つ、定番のIDE(統合開発環境)やエディターを6つ厳選して紹介します。それぞれの特徴や主な機能を比較しながら、自分に合った開発環境選びの参考にしてください。 1. Eclipse Galileo(CDTプラグイン) Eclipseは、オープンソースでクロスプラットフォーム対応として広く知られているIDEです。CDTプラグインを導入することで、フル機能のC/C++開発環境を構築できます。主な機能は以下のとおりです。 シンタックスハイライトに対応したコードエディター コードの折りたたみやハイパーリンクナビゲーション ソースコードのリファクタリングとコー
-
おすすめのC++コードフォーマッタ/ビューティファイア徹底解説
ソースコードを美しく整形し、適切なインデントを自動で整えてくれるC++コードフォーマッタ(ビューティファイア)は、実にたくさんの種類が存在します。コードの可読性を向上させ、チーム開発でのスタイル統一にも役立つこれらのツールは、C++プログラマーにとって欠かせない存在といえるでしょう。本記事では、代表的なC++コードフォーマッタ/ビューティファイアを、ローカル環境向けとオンラインサービス向けに分けてご紹介します。ローカルで使えるC++コードフォーマッタ/ビューティファイアツール名概要Astyleソースコードフォーマッタです。C++やJavaをはじめ、複数のプログラミング言語に対応しています。最新
-
C++のdelete演算子とfree()関数の違いと使い方を徹底解説
C++やC言語で動的に確保したメモリを解放する方法として、主にdelete演算子とfree()関数の2つがあります。本記事では、それぞれの構文、使い方、そして実際のコード例を通して、両者の違いをわかりやすく解説します。 delete演算子とは delete演算子は、new演算子によって動的に確保されたメモリを解放するために使用されます。プログラマは、この演算子を使って自分で作成したポインタ変数が指すメモリを自由に解放できます。 C++におけるdelete演算子の基本構文は以下の通りです。 delete ポインタ変数名; また、new[]で確保した配列形式のメモリブロックを解放する場合は、次の
-
C++のisprint()関数とは?使い方とサンプルコードをわかりやすく解説
C++のisprint()関数とは isprint()は、C++であらかじめ用意されている標準ライブラリ関数の一つで、引数として渡された文字が「印字可能文字(画面に表示できる文字)」かどうかを判定します。判定の結果、文字が印字可能であれば0以外の値(真)を返し、そうでなければ0(偽)を返します。この関数を使用するには、ヘッダーファイル「cctype」をインクルードする必要があります。 isprint()の構文 C++におけるisprint()関数の構文は以下の通りです。 int isprint(int character); character − 印字可能かどうかを判定したい文字を指定しま
-
C++のdelete演算子とは?動的メモリ解放の基本と使い方を解説
delete演算子は、new演算子によって動的に確保されたメモリを解放するために使用されます。プログラマはこのdelete演算子を使うことで、不要になったポインタ変数が指すメモリ領域を明示的に解放し、メモリリークを防ぐことができます。 delete演算子の基本構文 C++におけるdelete演算子の基本的な構文は以下の通りです。 delete pointer_variable; また、配列として確保したメモリブロックを解放する場合は、次のように角括弧 [ ] を付けて記述します。 delete[] pointer_variable; それでは、C++でのdelete演算子の具体的な使用例を見て
-
C++の親クラス(基底クラス)から継承されるものとは?
オブジェクト指向プログラミングでは、親クラスの特性を子クラスに引き継ぐ「継承」という仕組みを利用できます。親クラスは基底クラス(base class)、子クラスは派生クラス(derived class)と呼ばれます。派生クラスは、基底クラスが持つデータメンバ(メンバ変数)やメンバ関数を継承することができます。アクセス指定子による継承の違い継承されるメンバへのアクセス可否は、アクセス指定子によって決まります。public:派生クラス、同じクラス内、クラス外のどこからでもアクセス可能です。protected:派生クラスと同じクラス内からのみアクセス可能です。クラス外からはアクセスできません。pri
-
C/C++で独自のsizeof演算子を自作する方法|#defineマクロとポインタ演算の活用
独自のsizeof()演算子とは?C言語やC++では、標準のsizeof()演算子に頼らず、自分専用のsizeof()演算子を自作することも可能です。sizeof()は単項演算子の一種で、変数やデータ型がメモリ上で占めるサイズ(バイト数)を計算するために使われます。#defineディレクティブ(関数形式マクロ)を利用すれば、標準のsizeof()とまったく同じように動作する独自のsizeof()を実装できます。実装の仕組みこのテクニックの鍵となるのはポインタ演算です。あるオブジェクトのアドレスに1を加えると、ポインタは「その型1つ分」だけ前進します。そこで、元のアドレスと1つ先のアドレスをそれ
-
C++で数値の各桁の合計を計算するプログラム
ここでは、C++言語を使用して入力された整数の各桁の合計を計算する方法を紹介します。剰余演算子と整数除算を組み合わせたシンプルなアルゴリズムで実装できます。 プログラム例 #include<iostream> using namespace std; int main() { int x, s = 0; cout << Enter the number : ; cin >> x; while (x != 0) {
-
ループと再帰を使わずにC++で1から100までの数字を出力する方法
C++で数字を出力する際、通常はfor文やwhile文などのループ構文を使用しますが、ループや再帰を使わずに実現する方法もいくつか存在します。代表的な手法としては、goto文を利用する方法、再帰関数を利用する方法、そしてmain()関数の外に関数を定義して呼び出す方法などが挙げられます。本記事では、その中でもgoto文を使って1から指定した最大値までの数字を出力するC++プログラムの例を紹介します。サンプルコード:goto文を使った出力プログラム#include <bits/stdc++.h> using namespace std; int main() { int co
-
C++のstaticキーワードとは?静的変数と静的関数の使い方を解説
staticキーワードとは C++において、static(静的)キーワードを付けた変数・データメンバ・関数は、プログラムの開始から終了までの間、メモリ領域が確保され続けます。そのため、プログラムの生存期間全体にわたって値が保持されます。また、静的メンバ関数はオブジェクトを生成しなくても、クラス名を指定して直接呼び出すことができる点も大きな特徴です。 static変数の基本的な性質 static変数には、以下のような特徴があります。 初期化は一度だけ − static変数は実行中に一度だけ初期化され、以降は値が保持され続けます。 プログラム終了まで存続 − コンパイラはプログラムが終了するま
-
再帰を使ってフィボナッチ数列を求めるC++プログラム
フィボナッチ数列は、最初の2項が0と1であり、それ以降の各項が直前の2項の和となる数列です(0, 1, 1, 2, 3, 5, 8, 13, 21...)。この記事では、再帰関数を用いてフィボナッチ数列を生成するC++プログラムを紹介します。 サンプルコード #include <iostream> using namespace std; int fib(int x) { if((x==1)||(x==0)) { return(x); &n
-
大きな数の階乗を求めるC++プログラムの書き方
階乗とは、1からその数までのすべての整数を掛け合わせた値のことです。たとえば 5! = 5×4×3×2×1 = 120 となります。以下に、階乗を求めるC++プログラムの例を示します。 プログラム例 #include <iostream> using namespace std; unsigned long long int fact(unsigned long long int n) { if (n == 0 || n == 1) return 1; else return n * fact(n - 1); } int mai
-
【C++】階乗を使って組み合わせ(nCr)を計算するプログラム
組み合わせ(コンビネーション)とは、n個の異なる要素の中からr個を選び出すときの選び方の総数を表す概念で、数学では次の式で定義されます。 nCr = n! / (r! × (n − r)!) ここで「!」は階乗を意味し、例えば 5! = 5 × 4 × 3 × 2 × 1 = 120 となります。以下は、この公式を階乗の計算によって実装したC++プログラムの例です。 サンプルコード #include <iostream> using namespace std; int fact(int n) { if (n == 0 || n == 1) return 1;
-
C++で数値が2つの素数の和として表現できるかを判定する方法
はじめにこの記事では、入力された数値が2つの素数の和として表現できるかどうかを判定するC++プログラムを紹介します。このテーマは、有名な「ゴールドバッハ予想」(4以上のすべての偶数は2つの素数の和で表せるという未解決問題)にも関連しており、素数判定の基礎を学ぶのに最適な題材です。サンプルコード#include <iostream>using namespace std;int func(int num) { int i; int flag = 1; for(i = 2; i <= num/2; ++i)
-
反復処理を使ってフィボナッチ数列を求めるC++プログラム
以下に、反復処理(ループ)を使ってフィボナッチ数列を求めるC++プログラムの例を示します。 サンプルコード #include <iostream> using namespace std; void fib(int num) { int x = 0, y = 1, z = 0; for (int i = 0; i < num; i++) { cout << x <<
-
C++のstaticキーワードとは?静的変数・静的関数の使い方を実例で解説
C++におけるstaticキーワードは、変数・データメンバ・関数に対して使用でき、これらがプログラムの生存期間全体にわたってメモリ上に確保されることを意味します。staticが付いた変数やデータメンバは、一度変更・初期化された後もプログラムが終了するまでその状態が保持されます。また、静的メンバ関数はオブジェクトを生成しなくても、クラス名を使って直接呼び出すことができるのが大きな特徴です。 static変数の主な特徴 初期化は1回だけ:static変数はプログラム実行中に一度だけ初期化され、以降は値が保持され続けます。 寿命が長い:コンパイラはプログラム終了まで変数をメモリ上に保持します。