OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

C++の基礎的な問題 ( 当方,初心者です. )

  • すぐに回答を!
  • 質問No.191464
  • 閲覧数79
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 22% (9/40)

はじめまして.

以下の問題を解くために自分でプログラムを書きました.


【 問題 】

******************************************************

図書館の目録管理用に,cardというクラスを作成せよ.
このクラスに本のタイトルと著者,在庫数を格納します.
タイトルと著者を文字列として保存し,在庫数を整数として保存します.
store()という公開メンバ関数を使用して本情報を保存し,
show()という公開メンバ関数により保存したデータを表示せよ.

******************************************************

しかしわからない点が1つあります.
メンバ関数のstoreに文字列を渡すにはどうしたらよいでしょうか??

なお計算機環境は,VC++ver6.0をインストール済みのWin2000です.
また,VCではWin32コンソールアプリケーションを利用して
以下のコードを書いています.

ご指導お願いします.



#include <iostream>
using namespace std; // 名前空間.

// クラスcardの定義.
class card {
char title;
char author;
int num;

// 公開メンバ関数のプロトタイプ.
public:
void store(char title_name, char author_name, int zaiko_num);
void show();

};

// メンバ関数の定義.
// データ記録用.
void card::store(char title_name, char author_name, int zaiko_num)
{
title = title_name;
author = author_name;
num = zaiko_num;
}

// メンバ関数の定義.
// データ表示用.
void card::show()
{
cout << title << endl;
cout << author << endl;
cout << num << endl;
};


int main(int argc, char* argv[])
{

// クラスオブジェクトの作成.
card cd;

// メンバ関数の参照.
cd.store('C','U',20);
cd.show();

return 0;
}
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル12

ベストアンサー率 41% (324/772)

> となるのですか?
そうです。

ある関数が「文字列」を受け取るにはchar *valueという形で受け取ります。
このような値の渡し型を「参照渡し(Call By Reference)」と言います。
この場合、関数内で受け取ったchar *valueに対して何かの操作すると、呼び出し元の変数の値(つまり文字列の実体の方)が変更されます。
お礼コメント
kakaomame00

お礼率 22% (9/40)

ふむ,もう一度C言語の本をひっくり返して復習します.
詳しい解説どうもありがとうございました.
今後もどうぞよろしくお願いいたします.
投稿日時 - 2001-12-28 12:06:35
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 41% (324/772)

まずは、基本を。 char 変数名; の変数には「1文字」しか格納できません。つまり「文字列」を格納することはできません。 「文字列」を格納するには「文字型の配列」または「文字型へのポインタ」を使う必要があります。 また、値の代入に関してはmemcpyやstrcpyを使います。 単純な代入では挙動不審になります。 また、コピー先の変数には、予め十分な容量が確保されている必要がありま ...続きを読む
まずは、基本を。

char 変数名;
の変数には「1文字」しか格納できません。つまり「文字列」を格納することはできません。

「文字列」を格納するには「文字型の配列」または「文字型へのポインタ」を使う必要があります。

また、値の代入に関してはmemcpyやstrcpyを使います。
単純な代入では挙動不審になります。
また、コピー先の変数には、予め十分な容量が確保されている必要があります。
補足コメント
kakaomame00

お礼率 22% (9/40)

さっそく解説していただき有り難うございます.
C++というよりはCの基本がわかっていませんでした.
つまり,引数としては, 公開メンバ関数 store()の引数で,
文字列を渡す場合は,たとえば,char *dataとすべきということで
理解してよろしいでしょうか?
すなわち,上のコードに準拠してかけば,
void store::card( char *title_name , char *author_name, int zaiko_num)
{
// 関数定義内容.
}
となるのですか?
投稿日時 - 2001-12-27 19:48:00


  • 回答No.3
レベル12

ベストアンサー率 48% (325/664)

C++を使用しているのでしたら、stringクラスを使用されてはいかがでしょうか? stringクラスを使用してソースを書き直すと以下のようになります。 #include <iostream> #include <string> using namespace std; // 名前空間. // クラスcardの定義. class card { st ...続きを読む
C++を使用しているのでしたら、stringクラスを使用されてはいかがでしょうか?
stringクラスを使用してソースを書き直すと以下のようになります。

#include <iostream>
#include <string>
using namespace std; // 名前空間.

// クラスcardの定義.
class card {
string title;
string author;
int num;

// 公開メンバ関数のプロトタイプ.
public:
void store( string& title_name, string& author_name, int zaiko_num );
void show();

};

// メンバ関数の定義.
// データ記録用.
void card::store( string& title_name, string& author_name, int zaiko_num )
{
title = title_name;
author = author_name;
num = zaiko_num;
}

// メンバ関数の定義.
// データ表示用.
void card::show()
{
cout << title << endl;
cout << author << endl;
cout << num << endl;
};


int main(int argc, char* argv[])
{

// クラスオブジェクトの作成.
card cd;

// 目録データの設定
string oTitle = "I, Robot";
string oAuther = "Asimov, Issac";
cd.store( oTitle, oAuther, 20 );

// 目録データの表示.
cd.show();

return 0;
}
お礼コメント
kakaomame00

お礼率 22% (9/40)

こんにちは.C++での実装法の解説ありがとうございます.
実際コードを書いて,その挙動を確認してみます.
それでは失礼します.今後もよろしくお願いします.
投稿日時 - 2001-12-28 12:04:40
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ