ページ 1 / 1
別ファイルのクラスのスタティック変数(関数)の参照について
Posted: 2012年2月04日(土) 16:33
by muta
スタティック(静的)変数の外部ファイルの参照は
皆さん知ってのとおりポインタを使えば出来ます
例
sub.cpp
コード:
static int s=1;
int *sp=&s;
static int func()
{
return s*10;
}
int (*pf)(void)=&func;
main.cpp
コード:
#include <stdio.h>
extern int *sp;
extern int (*pf)(void);
int main(void)
{
printf("%d\n",*sp);//ポインタで静的変数
printf("%d\n",pf());//ポインタで静的関数
return 0;
}
また、静的メンバ関数のポインタは
コード:
//ヘッダ
class CSample{
public :
static int func();
}
//ソース
int (*pFunc)() = &CSample::func; //何処かで実体化させる必要有り
pfunc();
//ソース省略
ですが、クラスメンバ関数が複数ある場合は一々こうするのは正直効率的では無いようにに思えます。
ですので、クラスのポインタを作ってアクセスしたいと思うのですが可能でしょうか?
例
コード:
//ヘッダ
class Csample{
pblic:
static int func();
}
//別ファイル
Csample *csample=new Csample;
//別ファイル
extern Csample *csample;
csample->func();
のようにすることは出来ますでしょうか?
Re: 別ファイルのクラスのスタティック変数(関数)の参照について
Posted: 2012年2月04日(土) 17:42
by beatle
muta さんが書きました:
のようにすることは出来ますでしょうか?
コンパイルできるかどうか,という質問なら,実際にコンパイルしてみれば分かることです.
Re: 別ファイルのクラスのスタティック変数(関数)の参照について
Posted: 2012年2月04日(土) 17:55
by softya(ソフト屋)
コード:
//ヘッダ
class Csample{
pblic:
static int func();
}
//別ファイル
Csample *csample=new Csample;
//別ファイル
extern Csample *csample;
csample->func();
これは、どういうメリットを狙ったプログラムコードなのでしょうか?
狙いを教えて下さい。
Re: 別ファイルのクラスのスタティック変数(関数)の参照について
Posted: 2012年2月04日(土) 19:08
by muta
beatleさん
すみません、さまざまな方法を学びたかったので。
softyaさん
グループでプログラミングをした際に
他の人が書いてもらったソースコードでクラスの中に静的関数(変数)が使われていて
その関数(変数)にアクセスしなくてはならなくなった場合です。
単純に関数が一つだった時ならメンバ関数(変数)のポインタを一つ用意すればいいと思うのです
複数の場合大変だと思ったので質問させていただきました。
クラスのポインタで済むならソースコードも少なくて済むのでは無いのかと思ったので。
と、此処まで書いて思い出しました
すみません、すっかり忘れてました静的メンバはインスタンス無しで呼び出せました。
わざわざインスタンス化する必要はありませんでした申し訳ありません。
Re: 別ファイルのクラスのスタティック変数(関数)の参照について
Posted: 2012年2月04日(土) 19:22
by たかぎ
何か根本的な勘違いをしているような...
クラスの静的メンバは、publicであればどこからでもアクセスできます。
protectedやprivateであっても、翻訳単位に関わらず、そのクラスのメンバ関数からならアクセス可能です。
Re: 別ファイルのクラスのスタティック変数(関数)の参照について
Posted: 2012年2月04日(土) 19:53
by muta
たかぎさん
ほんっとうにしょーもない勘違いしてました
静的変数はそのファイルだけ→クラスも・・・
というしょーもない勘違いを
クラスの静的メンバはpublicじゃなければ何処からでもアクセスできる筈なのに
ちょっと昔勉強したことがすっかり頭から飛んでました。
Re: 別ファイルのクラスのスタティック変数(関数)の参照について
Posted: 2012年2月04日(土) 19:54
by muta
あ、ミスです
publicじゃなければ→publicであれば
疲れてるのかな
Re: 別ファイルのクラスのスタティック変数(関数)の参照について
Posted: 2012年2月04日(土) 21:30
by beatle
C言語の特徴である,1つのキーワードに複数の意味があることの弊害ですね.
特にstaticは沢山の重複した意味を持つとか.