クラス中で宣言された構造体の内容を覚えるために – プログラミング – Home

クラス中で宣言された構造体の内容を覚え...
 
通知
すべてクリア

[解決済] クラス中で宣言された構造体の内容を覚えるために


包
 包
(@包)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

はじめまして、包です。
クラス中で宣言された構造体の値を覚えるために、
何をすればいいか教えてください。

--------------------------------------
class Format
{
private :
struct FMT_INFO
{
char name;
char def;
};
FMT_INFO FmtInfo[10];
int index;

public:
Format();
virtual ~Format();
char GetFmtName(int index) { return FmtInfo[index].name; }
char GetFmtDef(int index) { return FmtInfo[index].def; }
void SetFmtName(char name, int index) { FmtInfo[index].name = name; }
void SetFmtDef(char def, int index) { FmtInfo[index].def = def;}
};
---------------------------------------

上のようなclassがあって、
Format format1;
Format format2;
を宣言します。

format1::SetFmtName(name0, 0)
format2::GetFmtName(0)
をやった時、format2::GetFmtName(0)でもらったNameの値がname0である
ようにしたいです。

よろしくお願いします。


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

とりあえず、
> Format format1;
> Format format2;
と分けるのはどうしてでしょうか?

別の変数を使いたいのであれば、参照を使えばよさそうですが。


返信引用
包
 包
(@包)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

こんにちは、Blueさん。

format1とformat2は違う関数中で宣言しました。
それぞれやる時、同じFmtInfo[10]にaccessしたかったです。


返信引用
ebimayo
 ebimayo
(@ebimayo)
ゲスト
結合: 19年前
投稿: 40
 

別々のインスタンスを生成してるから同じものにアクセスできないのでは?


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

本当はグローバル変数にしたいという感じでしょうか?
クラスのメソッド内であれば、メンバ変数にするのが普通ですが。

全体で、FormatのFmtInfoが一つしかありえないのであれば、staticメンバ変数にすると
か。
#include <iostream>

class Format
{
private :
struct FMT_INFO
{
char name;
char def;
};
static FMT_INFO FmtInfo[10];

public:
Format(){};
virtual ~Format(){};
char GetFmtName(const int index) const{ return FmtInfo[index].name; }
char GetFmtDef(const int index) const{ return FmtInfo[index].def; }
void SetFmtName(const char name, const int index) { FmtInfo[index].name =
name; }
void SetFmtDef(const char def, const int index) { FmtInfo[index].def =
def;}
};
Format::FMT_INFO Format::FmtInfo[10] = { 0 };

void func1()
{
Format f;
f.SetFmtName( 'a', 0 );
}

void func2()
{
Format f;
std::cout << f.GetFmtName( 0 ) << std::endl;
}

int main()
{
func1();
func2();
return 0;
}


返信引用
包
 包
(@包)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

こんにちは、ebimayoさん。

FormatのFmtInfoはプログラム中で、一個だけです。
staticを使って、FmtInfoの値を覚えますね。
これから使います。

----------------------------------------------
Format::FMT_INFO Format::FmtInfo[10] = { 0 };
----------------------------------------------

今、FMT_INFO中のnameもdefもcharです。
しかし、もし、FMT_INFO中に、例えばint testがある、
charとintは違う。でも、上の式は大丈夫ですか?
Format::FMT_INFO Format::FmtInfo[10].test = { 0 };
にしますか?


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

> でも、上の式は大丈夫ですか?
単なる初期化です。よくやる手ですよ。
(ポインタメンバ変数だろうint型変数だろうがなんだろうが0で初期する)
# static変数だからなくても同じでした。

どうしても違和感があるならば、
Format::FMT_INFOにデフォルトコンストラクタをつくってください。


返信引用
包
 包
(@包)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

もし、初期化をやらないで、
Format::FMT_INFO Format::FmtInfo[10];
だけやっても大丈夫ですか?
初期化は他のところでやります。


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

> だけやっても大丈夫ですか?
大丈夫です。static変数ですから勝手に初期化されますが。


返信引用
包
 包
(@包)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

わかりました。

Blueさん、教えてくださって、ありがとうございました。


返信引用
包
 包
(@包)
ゲスト
結合: 18年前
投稿: 6
Topic starter  

解決済のチェックを忘れました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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