メンバ関数の参照の方法を教えてください。 – プログラミング – Home

メンバ関数の参照の方法を教えてください...
 
通知
すべてクリア

[解決済] メンバ関数の参照の方法を教えてください。


クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

初歩的な質問で申し訳ありません。
下記のようなクラスを定義したのですが、
class CA
{
private:
CString str;
public:
CString GetStr;
}

void CA::SetStr()
{
str = xXxX; // <--本当はファイルから取得しています。
}

CString CA::GetStr()
{
return (str);
}
------------------------------

下記のクラス(CxxxApp)にメンバ変数作成し、SetStr()を呼び出す。
private:
CA m_A;

BOOL CxxxApp::InitInstance()
{
省略...
m_A.SetStr();
省略...
}

で、あるダイアログから
CString strX = CA::GetData();
といった感じで取得したのですが、結果が「0」となり、うまくいきません。
また、できれば、CxxxAppでメンバ変数を使用せずに、SetStr()を呼び出す方法も教えて欲しい
のです。
なにぶん、VCを始めて1週間ですので、解らない事だらけで申し訳有りませんが、
どうか、教えてください。
追記:MFCを使用しダイアログ形式で作成しています。


引用未解決
トピックタグ
NGA
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

>str = xXxX; // <--本当はファイルから取得しています。
ファイルから取得するという部分は動作確認が取れているのでしょうか?

>CxxxAppでメンバ変数を使用せずに、SetStr()を呼び出す方法
SetStr()がprivateなクラスメンバでなければ、CxxxAppクラスをCAクラスから派生させる。


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

>ファイルから取得するという部分は動作確認が取れているのでしょうか?
はい、デバックやメッセージボックスを立ち上げる等をして確認が取れています。

補足ですが、CxxxAppは一番最初に呼ばれるクラスらしいので、「InitInstance」の中に記述
しました。
また、ファイルは一度読み込んだら、再度読み込む必要が無いのです。
そういった考えを元に作成しておりますが、どのような方法が一番効率がいいのか判らないの
で、そのあたりもご指導願えたらと思っております。

まことに勝手だと思いますが、よろしくお願いします。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

>また、ファイルは一度読み込んだら、再度読み込む必要が無いのです。
設定情報でも読み込ませているのでしょうか?
MFCでダイアログベースでしたよね。
CxxxAppDlg::OnInitDialog()で
「// TODO: 特別な初期化を行う時はこの場所に追加してください。」
に記述してもいいのではないのでしょうか?


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

できれば、後々の事を考えて機能別に分割をしようと思いまして・・・確かに、
CxxxAppDlg::OnInitDialog()に記述してしまえば、簡単に済むことなのでしょうが、
(私にとっては簡単な事ではないのですが・・・)
希望としては、クラス>クラス>クラス……みたいな事がしてみたいのです。
本当に生意気だと思っております。
そこを何とかお願いします。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

>SetStr()がprivateなクラスメンバでなければ、CxxxAppクラスをCAクラスから派生させる。
これはどうなったのでしょう?


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

>SetStr()がprivateなクラスメンバでなければ、CxxxAppクラスをCAクラスから派生させる
CxxxAppクラスは
CxxxAppDlg::OnInitDialog() : CA::SetStr
としてもいいのでしょうか?
MFCが作ったクラスなので、弄らない方がいいのでは・・・と思っていたのですが・・・


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

CAクラスの詳細がわからないのですが、とりあえず試してみては?


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

CAクラスは上記のとおりです。
ファイルの読込のところを省略しただけなので、クラスとしては問題ありません。
ただ、
class CxxxApp : public CWinApp
となっているので、派生クラスを追加できるのでしょうか?


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

>class CxxxApp : public CWinApp
とりあえず以下の様にしてみてください。
class CxxxApp : public CWinApp, public CA
問題があればまた。


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

派生を追加する事が出来ました。(^○^)
ただ、このぐらいの機能に対しメインとなる、CxxxAppに派生させていいのでしょうか?
逆にメンバ変数を作成して実行した方がいいのでしょうか?
どちらにしても、実数値が取得できないので、よろしくお願いします。


返信引用
NGA
 NGA
(@NGA)
ゲスト
結合: 24年前
投稿: 98
 

>ただ、このぐらいの機能に対しメインとなる、CxxxAppに派生させていいのでしょうか?
>逆にメンバ変数を作成して実行した方がいいのでしょうか?
私としてはどちらでもいいような……。

>どちらにしても、実数値が取得できないので、よろしくお願いします。
そのあたりの現在のソースを載せてもらえると答えやすいかと思います。


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

あるダイアログから
CString strX = CA::GetData();
みたいな事をしたいのですが・・・


返信引用
クリリン
 クリリン
(@クリリン)
ゲスト
結合: 23年前
投稿: 175
Topic starter  

できました。(^o^)丿
CxxxApp *pApp = ((CxxxApp*)AfxGetApp());
この記述でCxxxAppの内部変数を参照できるようになるので、
CString str = pxxxApp->GetStr();
と記述すると実数値が取得できました。
NGAさん・・・本当にありがとうございました。クラスを継承する事で、メンバ変数から何と
か・・・って事がなくなったので、すっきりしたコーディングになりましたし、
この方法が初心者には理解しやすいかな?
って思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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