別ファイルのクラスのスタティック変数(関数)の参照について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
muta

別ファイルのクラスのスタティック変数(関数)の参照について

#1

投稿記事 by muta » 14年前

スタティック(静的)変数の外部ファイルの参照は
皆さん知ってのとおりポインタを使えば出来ます


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();
のようにすることは出来ますでしょうか?

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 別ファイルのクラスのスタティック変数(関数)の参照について

#2

投稿記事 by beatle » 14年前

muta さんが書きました: のようにすることは出来ますでしょうか?
コンパイルできるかどうか,という質問なら,実際にコンパイルしてみれば分かることです.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 別ファイルのクラスのスタティック変数(関数)の参照について

#3

投稿記事 by softya(ソフト屋) » 14年前

コード:

//ヘッダ
class Csample{
pblic:
static int func();
}
//別ファイル
Csample *csample=new Csample;
//別ファイル
extern Csample *csample;
csample->func();
これは、どういうメリットを狙ったプログラムコードなのでしょうか?
狙いを教えて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

muta

Re: 別ファイルのクラスのスタティック変数(関数)の参照について

#4

投稿記事 by muta » 14年前

beatleさん
すみません、さまざまな方法を学びたかったので。

softyaさん
グループでプログラミングをした際に
他の人が書いてもらったソースコードでクラスの中に静的関数(変数)が使われていて
その関数(変数)にアクセスしなくてはならなくなった場合です。
単純に関数が一つだった時ならメンバ関数(変数)のポインタを一つ用意すればいいと思うのです
複数の場合大変だと思ったので質問させていただきました。
クラスのポインタで済むならソースコードも少なくて済むのでは無いのかと思ったので。

と、此処まで書いて思い出しました
すみません、すっかり忘れてました静的メンバはインスタンス無しで呼び出せました。
わざわざインスタンス化する必要はありませんでした申し訳ありません。

たかぎ
記事: 328
登録日時: 15年前
住所: 大阪
連絡を取る:

Re: 別ファイルのクラスのスタティック変数(関数)の参照について

#5

投稿記事 by たかぎ » 14年前

何か根本的な勘違いをしているような...

クラスの静的メンバは、publicであればどこからでもアクセスできます。
protectedやprivateであっても、翻訳単位に関わらず、そのクラスのメンバ関数からならアクセス可能です。

muta

Re: 別ファイルのクラスのスタティック変数(関数)の参照について

#6

投稿記事 by muta » 14年前

たかぎさん
ほんっとうにしょーもない勘違いしてました
静的変数はそのファイルだけ→クラスも・・・
というしょーもない勘違いを
クラスの静的メンバはpublicじゃなければ何処からでもアクセスできる筈なのに
ちょっと昔勉強したことがすっかり頭から飛んでました。

muta

Re: 別ファイルのクラスのスタティック変数(関数)の参照について

#7

投稿記事 by muta » 14年前

あ、ミスです
publicじゃなければ→publicであれば
疲れてるのかな

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 別ファイルのクラスのスタティック変数(関数)の参照について

#8

投稿記事 by beatle » 14年前

C言語の特徴である,1つのキーワードに複数の意味があることの弊害ですね.
特にstaticは沢山の重複した意味を持つとか.

閉鎖

“C言語何でも質問掲示板” へ戻る