#include <iostream>
#include <cstring>
using namespace std;
class samp{
char s[80]; // 80 文字以内の文字列をメンバ変数として持つ
public:
// 以下のように簡単なメンバ関数であればクラス定義内で定義できる
void show(){ cout << s << "\n";} // クラス宣言部でも関数を定義できる
void set(char *str){ strcpy(s,str); } // 80 文字以上の文字列をセットしないこと
};
// これは C 言語的な関数。samp クラスのオブジェクトを返す。
samp input(){
char s[80];
samp str;
cout << "文字列の入力: ";
cin >> s; // コンソールから文字列を取得。
str.set(s); // 取得した文字列を samp クラスのオブジェクト str にセット
return str; // str を戻り値として返す。
}
int main(){
samp ob;
ob = input(); // コンソール取得した文字列を ob にコピー
ob.show(); // 取得した文字列をコンソールに表示
return 0;
}
|
#include <iostream>
#include <cstring>
#include <cstdlib> // (※) malloc のため
using namespace std;
class samp{
char *s; // (※) 今度は配列ではなくポインタ
public:
samp(){ s=0; } // (※) コンストラクタ。ヌルポインタで初期化
~samp(){ if(s) free(s); cout << "s を解放\n";} // (※) デストラクタ。条件文は if(s!=0) と同じ。
void show(){ cout << s << "\n";}
void set(char *str); // (※)
};
// これは samp クラスのメンバ関数の定義
void samp::set(char *str){ // (※)
s = (char *)malloc(strlen(str)+1); // (※)
if(!s){ // (※) メモリの割り当てに失敗したら。if(s==0) と同じ
cout << "メモリ割り当てエラー\n"; // (※)
exit(1); // (※) 強制終了
} // (※)
strcpy(s,str); // (※)
} // (※)
// これは C 言語的な関数。samp クラスのオブジェクトを返す。
samp input(){
char s[80];
samp str;
cout << "文字列の入力: ";
cin >> s; // コンソールから文字列を取得。
str.set(s); // 取得した文字列を samp クラスのオブジェクト str にセット
return str; // str を戻り値として返す。
}
int main(){
samp ob;
ob = input();
ob.show();
return 0;
}
|