はじめまして.
以下の問題を解くために自分でプログラムを書きました.
【 問題 】
******************************************************
図書館の目録管理用に,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;
}
No.1
- 回答日時:
まずは、基本を。
char 変数名;
の変数には「1文字」しか格納できません。つまり「文字列」を格納することはできません。
「文字列」を格納するには「文字型の配列」または「文字型へのポインタ」を使う必要があります。
また、値の代入に関してはmemcpyやstrcpyを使います。
単純な代入では挙動不審になります。
また、コピー先の変数には、予め十分な容量が確保されている必要があります。
この回答への補足
さっそく解説していただき有り難うございます.
C++というよりはCの基本がわかっていませんでした.
つまり,引数としては, 公開メンバ関数 store()の引数で,
文字列を渡す場合は,たとえば,char *dataとすべきということで
理解してよろしいでしょうか?
すなわち,上のコードに準拠してかけば,
void store::card( char *title_name , char *author_name, int zaiko_num)
{
// 関数定義内容.
}
となるのですか?
No.2ベストアンサー
- 回答日時:
> となるのですか?
そうです。
ある関数が「文字列」を受け取るにはchar *valueという形で受け取ります。
このような値の渡し型を「参照渡し(Call By Reference)」と言います。
この場合、関数内で受け取ったchar *valueに対して何かの操作すると、呼び出し元の変数の値(つまり文字列の実体の方)が変更されます。
ふむ,もう一度C言語の本をひっくり返して復習します.
詳しい解説どうもありがとうございました.
今後もどうぞよろしくお願いいたします.
No.3
- 回答日時:
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++での実装法の解説ありがとうございます.
実際コードを書いて,その挙動を確認してみます.
それでは失礼します.今後もよろしくお願いします.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
atoi( ) の反対をやりたい
-
テキストデータをそのままバイ...
-
下記のプログラムがコンパイラ...
-
_TCHAR*での引数の読み込み
-
C言語のfor文です。 繰り返しの...
-
str系関数を使わずに二つの文字...
-
至急!C言語文字列置換
-
C言語の入力した文字を反転させ...
-
型変換
-
charからLPTSTRへの変換方法
-
strlen関数と同じ働きをする関...
-
'const char *' 型は 'char *' ...
-
C言語 ミリ秒を日付に変換には
-
文字列から空白を取り除きたい...
-
C言語 共用体について コマンド...
-
C言語 文字列操作
-
c言語プログラミング実行時エラ...
-
間接参照のレベルが異なっています
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
'const char *' 型は 'char *' ...
-
型変換
-
テキストデータをそのままバイ...
-
文字列から空白を取り除きたい...
-
CStringをwchar_tに変換したい
-
絶対パスからのファイル名の切...
-
fgetsなどのときのstdinのバッ...
-
ネットワークにつながっている...
-
str系関数を使わずに二つの文字...
-
3桁区切(コンマ)記号をつけ...
-
atoi( ) の反対をやりたい
-
double型の値をchar配列に変換...
-
C言語のfor文です。 繰り返しの...
-
switch文で文字を比較すること...
-
ファイル名である文字列からbas...
-
c++ 文字列を入力して、一文字...
-
strncpyと_tcsncpy_sのヌルの扱...
おすすめ情報