staticのメンバー変数について – プログラミング – Home

staticのメンバー変数について
 
通知
すべてクリア

[解決済] staticのメンバー変数について


ドルドル
 ドルドル
(@ドルドル)
ゲスト
結合: 19年前
投稿: 96
Topic starter  

 いつもお世話になります。今 WinXP、VC6.0で開発を行っているのですがそこで以下
のようなソースを見ました。

XXX.h

class TestSample
{
・・・・・・
private:
static int m_nNumber;

・・・・・・
};

ここで疑問なのですが メンバー変数にstaticをつけることによりどのようなメリット
があるのでしょうか?? 私はローカルメソッド内でstaticを利用することはあるのです
が・・・クラスのメンバー変数につけたことがないのでよくわからないでご教授よろし
くお願いします。


引用未解決
トピックタグ
KING・王
 KING・王
(@KING・王)
ゲスト
結合: 20年前
投稿: 122
 

あるclassのインスタンスを複数作成した場合に、
staticでないメンバはインスタンス毎に値を保持するが、
staticのメンバは1つしか作成されないため、インスタンス間で値が共有される。

上記例だと、
> TestSample ObjA, ObjB;
と二つのインスタンスを作成し、ObjAの中で、
> m_nNumber = 1;
とした場合、ObjBの中では、
> m_nNumber == 1;
が成り立つ。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

privateな静的メンバ変数は
同クラスの静的メソッドから使うことがあります。

参考
静的メンバ
http://wisdom.sakura.ne.jp/programming/cpp/cpp41.html
第30章 静かなるメンバ3
http://www1.kcn.ne.jp/~robe/cpphtml/html02/cpp02030.html


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> 同クラスの静的メソッドから使うことがあります。
とは限らなかったです。静的でないメソッドからも使うことありました。


返信引用
reshia
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

たとえば、そのクラスがインスタンス化された数を知りたいときに、
static int m_instanceNum;
をもっておけば、コンストラクタで、
m_instanceNum++;
とするとか。

メモリリークチェックのために、デストラクタで
m_instanceNum--;
しておいて、
プログラムの最後に、
assert(m_instanceNum==0);
を加えて、リークチェックするとか。

あと、たとえば、オセロのプログラムを作るとして、
class Othello {
public:
static const int BLACK = 1;
static const int WHITE = -1;
};
とすることは、ありますね。
BLACKとかWHITEは、インスタンス毎に必要な変数ではないですから。

使い道は、他にもあると思いますよ。


返信引用
ドルドル
 ドルドル
(@ドルドル)
ゲスト
結合: 19年前
投稿: 96
Topic starter  

KING・王さん。Blue さん。reshiaさん。ありがとうございます。
みなさんの助言を拝見させて頂きまして、少し疑問ができました。

>あるclassのインスタンスを複数作成した場合に、
>staticでないメンバはインスタンス毎に値を保持するが、
>staticのメンバは1つしか作成されないため、インスタンス間で値が共有される。

 これらの考えはオブジェクト指向にはなるのでしょうかね??同じクラスのインスタ
ンスでも 別オブジェクト同士での値の共有というのはカプセル化などの考えとは違っ
てくるのではないでしょうか??
 まだまだオブジェクト指向を理解していなくて 的外れな質問かもしれませんがよろ
しくお願いします。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

Javaのサイトですが参考にどうぞ。

オブジェクト指向言語
http://home.soka.ac.jp/~unemi/ProgLang/08Obj.html


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

属性(変数)には各インスタンスが持つものの他、クラスが持つ(つまり全インスタンスが共有す
る)
ものも考えられますし、それが必要となることがあります。
staticメンバは後者。


返信引用
ドルドル
 ドルドル
(@ドルドル)
ゲスト
結合: 19年前
投稿: 96
Topic starter  

KING・王さん。Blue さん。reshiaさん。επιστημη さん。ありがとうございます。
また、何かありましたらよろしくお願いします


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました