アプリ版:「スタンプのみでお礼する」機能のリリースについて

はじめまして.

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


【 問題 】

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

図書館の目録管理用に,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;
}

A 回答 (3件)

まずは、基本を。



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

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

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

この回答への補足

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

補足日時:2001/12/27 19:48
    • good
    • 0

> となるのですか?


そうです。

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

ふむ,もう一度C言語の本をひっくり返して復習します.
詳しい解説どうもありがとうございました.
今後もどうぞよろしくお願いいたします.

お礼日時:2001/12/28 12:06

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;
}
    • good
    • 0
この回答へのお礼

こんにちは.C++での実装法の解説ありがとうございます.
実際コードを書いて,その挙動を確認してみます.
それでは失礼します.今後もよろしくお願いします.

お礼日時:2001/12/28 12:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!