C++の静的メンバー関数を使ってオブジェクトの生成数をカウントする方法
本記事では、静的メンバー関数を使用して、クラスからいくつのオブジェクトが生成されたかをカウントする方法を解説します。
静的データメンバーは、クラスのすべてのオブジェクトによって共有される特殊なメンバーです。明示的に値を指定しない場合、静的データメンバーは常に0で初期化されます。
また、静的メンバー関数には、そのクラスの静的データメンバーのみを扱えるという重要な制約があります。
ここではStudentクラスを例に取り上げます。オブジェクトの個数を保持するための静的データメンバー「count」を宣言し、静的メンバー関数「rollCall(void)」を定義します。この関数は、クラス内の学生の出席番号のように、オブジェクトの数を表示します。
プログラムで使用しているアプローチ
publicなデータメンバー「int rollno」と、静的データメンバー「count」を持つStudentクラスを宣言します。
コンストラクターはrollCall()を呼び出し、rollnoをcountの値で初期化します。
デストラクターは、オブジェクトが破棄される際にcountを1減らします。
静的メンバー関数rollCall()は、学生数として現在のオブジェクト数を表示し、countをインクリメントします。
Studentオブジェクトが生成されるたびにコンストラクターがrollCall()を呼び出してcountが増加し、その値が該当オブジェクトのrollnoに代入されます。
main関数では、stu1〜stu4という4つのStudentクラスのオブジェクトを作成し、countおよびrollnoがオブジェクトの総数と一致することを確認します。
サンプルコード
// C++ program to Count the number of objects
// using the Static member function
#include <iostream>
using namespace std;
class Student {
public:
int rollno;
static int count;
public:
Student(){
rollCall();
rollno=count;
}
~Student()
{ --count; }
static void rollCall(void){
cout <<endl<<"Student Count:" << ++count<< "
"; //object count
}
};
int Student::count;
int main(){
Student stu1;
cout<<"Student 1: Roll No:"<<stu1.rollno;
Student stu2;
cout<<"Student 2: Roll No:"<<stu2.rollno;
Student stu3;
cout<<"Student 3: Roll No:"<<stu3.rollno;
Student stu4;
cout<<"Student 4: Roll No:"<<stu4.rollno;
return 0;
}出力結果
上記のコードを実行すると、次のような出力が得られます。
Student Count:1 Student 1: Roll No:1 Student Count:2 Student 2: Roll No:2 Student Count:3 Student 3: Roll No:3 Student Count:4 Student 4: Roll No:4
まとめ
このように、静的データメンバーはすべてのオブジェクト間で値を共有するため、オブジェクトの生成数の管理に最適です。コンストラクターでカウントを増やし、デストラクターで減らすことで、現在存在するオブジェクトの数を正確に追跡できます。
-
C++とOpenCVで動画の総フレーム数をカウント・取得する方法
はじめにこの記事では、OpenCVを使って動画の総フレーム数を求める方法を解説します。OpenCVを利用すれば、動画の総フレーム数を数えて表示するのは非常に簡単です。ただし、一点だけ注意が必要です。リアルタイム映像(Webカメラの映像など)のフレーム数は数えることができません。リアルタイム映像には決まったフレーム数が存在しないためです。以下のプログラムでは、動画ファイルの総フレーム数をカウントし、コンソール画面に表示します。サンプルコード#include<opencv2/opencv.hpp> #include<iostream> using namespace std
-
C++で1×mサイズのタイルを使ってn×mの床を敷き詰める方法の数を数える
問題概要部屋の床の長さと幅を表す 2 つの整数 n と m が与えられます。この床をサイズ 1×m のタイルで敷き詰める方法が何通りあるかを数えることが目的です。入力例 1n=3 m=2出力例 11 x m サイズのタイルを使用して n x m の床を敷き詰める方法の数は:3説明下図のように、1×2 のタイル 3 枚を並べる方法が 3 通り存在します。入力例 2n=3 m=3出力例 21 x m サイズのタイルを使用して n x m の床を敷き詰める方法の数は:2説明1×3 のタイル 3 枚をすべて縦方向に並べる方法と、すべて横方向に並べる方法があり、合計 2 通りとなります。考え方(アプロー