- ベストアンサー
C++の基礎的な問題 ( 当方,初心者です. )
はじめまして. 以下の問題を解くために自分でプログラムを書きました. 【 問題 】 ****************************************************** 図書館の目録管理用に,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)
- 専門家の回答
質問者が選んだベストアンサー
> となるのですか? そうです。 ある関数が「文字列」を受け取るにはchar *valueという形で受け取ります。 このような値の渡し型を「参照渡し(Call By Reference)」と言います。 この場合、関数内で受け取ったchar *valueに対して何かの操作すると、呼び出し元の変数の値(つまり文字列の実体の方)が変更されます。
その他の回答 (2)
- hitomura
- ベストアンサー率48% (325/664)
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; }
お礼
こんにちは.C++での実装法の解説ありがとうございます. 実際コードを書いて,その挙動を確認してみます. それでは失礼します.今後もよろしくお願いします.
- selenity
- ベストアンサー率41% (324/772)
まずは、基本を。 char 変数名; の変数には「1文字」しか格納できません。つまり「文字列」を格納することはできません。 「文字列」を格納するには「文字型の配列」または「文字型へのポインタ」を使う必要があります。 また、値の代入に関してはmemcpyやstrcpyを使います。 単純な代入では挙動不審になります。 また、コピー先の変数には、予め十分な容量が確保されている必要があります。
補足
さっそく解説していただき有り難うございます. C++というよりはCの基本がわかっていませんでした. つまり,引数としては, 公開メンバ関数 store()の引数で, 文字列を渡す場合は,たとえば,char *dataとすべきということで 理解してよろしいでしょうか? すなわち,上のコードに準拠してかけば, void store::card( char *title_name , char *author_name, int zaiko_num) { // 関数定義内容. } となるのですか?
お礼
ふむ,もう一度C言語の本をひっくり返して復習します. 詳しい解説どうもありがとうございました. 今後もどうぞよろしくお願いいたします.