C/C++学習手札(三)
それから友达について話します.
friendとオペレータの再ロード
Operator、この2つを明らかにするために、長い間苦労してスタックを作ったが、ポインタの問題で頭が大きくなった.でも、結局OK!
今度はこんなことをして、スポーツをします.各チームチームチームには5人の選手Comperitorがあり、選手に対して入桟、出桟操作を行うことができ、各選手には番号、名前がある.入力隊員情報、出力隊員情報をオペレータとして再ロードし、入力時に対応するヒントを与えることができます.
メンバークラスを構築する
名前に値を割り当てるとき、nameはchar配列を使用し、strcpyで値を割り当てる必要があります.
リロードオペレータを構築し、使用に注意
&シンボル、参照方法、オペレータの再ロードは友員メソッドでなければなりません!
インスタック、アウトスタックを制御するチームクラスを構築します.
ここではポインタ配列で隊員リストを構築します
ポインタの使用については、まだ説明ができませんが、長い間使えていました!
全体の手順を見てみましょう!
操作結果を確認します.
入桟、出桟操作が完了しました!
関連リンク:
C/C++学習手札(一)
C/C++学習手札(二)
C/C++学習手札(三)
friendとオペレータの再ロード
Operator、この2つを明らかにするために、長い間苦労してスタックを作ったが、ポインタの問題で頭が大きくなった.でも、結局OK!
今度はこんなことをして、スポーツをします.各チームチームチームには5人の選手Comperitorがあり、選手に対して入桟、出桟操作を行うことができ、各選手には番号、名前がある.入力隊員情報、出力隊員情報をオペレータとして再ロードし、入力時に対応するヒントを与えることができます.
メンバークラスを構築する
/**
*
*/
class Comperitor {
private:
char name[20]; //
int id; //
public:
/**
* ID
*/
int getId() {
return id;
}
/**
* ID
*/
void setId(int id) {
this->id = id;
}
/**
*
*/
char* getName() {
return name;
}
/**
*
*/
void setName(char *name) {
strcpy(this->name, name);
}
/**
*
*/
friend istream & operator >>(istream & is, Comperitor & c) {
cout << " : ";
is >> c.id;
cout << " : ";
is >> c.name;
return is;
}
/**
*
*/
friend ostream & operator <<(ostream & os, Comperitor & c) {
os << " : " << c.id << endl;
os << " : " << c.name << endl;
return os;
}
};
名前に値を割り当てるとき、nameはchar配列を使用し、strcpyで値を割り当てる必要があります.
/**
*
*/
void setName(char *name) {
strcpy(this->name, name);
}
リロードオペレータを構築し、使用に注意
&シンボル、参照方法、オペレータの再ロードは友員メソッドでなければなりません!
/**
*
*/
friend istream & operator >>(istream & is, Comperitor & c) {
cout << " : ";
is >> c.id;
cout << " : ";
is >> c.name;
return is;
}
インスタック、アウトスタックを制御するチームクラスを構築します.
/**
*
*/
class Team {
private:
/**
*
*/
Comperitor *c[5];
/**
*
*/
int pointer;
/**
*
*/
int MAX;
/**
*
*/
int MIN;
/**
*
*/
bool empty;
/**
*
*/
bool full;
public:
/**
*
*/
Team() {
MAX = 5;
MIN = 0;
pointer = MIN;
empty = false;
full = false;
}
/**
*
*/
int getPointer() {
return pointer;
}
/**
*
*/
void push() {
//
Comperitor *com = new Comperitor;
//
cin >> *com;
//
c[pointer] = com;
//
pointer++;
//
if (pointer >= MAX) {
//
pointer = MAX - 1;
//
full = true;
}
}
/**
*
*/
void pop() {
//
Comperitor *com = c[pointer];
//
cout << *com;
//
c[pointer] = NULL;
//
pointer--;
//
if (pointer < MIN) {
//
empty = true;
//
pointer = MIN;
}
}
/**
*
*/
bool isEmpty() {
return empty;
}
/**
*
*/
bool isFull() {
return full;
}
};
ここではポインタ配列で隊員リストを構築します
/**
*
*/
Comperitor *c[5];
ポインタの使用については、まだ説明ができませんが、長い間使えていました!
全体の手順を見てみましょう!
#include <iostream>
using namespace std;
/**
*
*/
class Comperitor {
private:
char name[20]; //
int id; //
public:
/**
* ID
*/
int getId() {
return id;
}
/**
* ID
*/
void setId(int id) {
this->id = id;
}
/**
*
*/
char* getName() {
return name;
}
/**
*
*/
void setName(char *name) {
strcpy(this->name, name);
}
/**
*
*/
friend istream & operator >>(istream & is, Comperitor & c) {
cout << " : ";
is >> c.id;
cout << " : ";
is >> c.name;
return is;
}
/**
*
*/
friend ostream & operator <<(ostream & os, Comperitor & c) {
os << " : " << c.id << endl;
os << " : " << c.name << endl;
return os;
}
};
/**
*
*/
class Team {
private:
/**
*
*/
Comperitor *c[5];
/**
*
*/
int pointer;
/**
*
*/
int MAX;
/**
*
*/
int MIN;
/**
*
*/
bool empty;
/**
*
*/
bool full;
public:
/**
*
*/
Team() {
MAX = 5;
MIN = 0;
pointer = MIN;
empty = false;
full = false;
}
/**
*
*/
int getPointer() {
return pointer;
}
/**
*
*/
void push() {
//
Comperitor *com = new Comperitor;
//
cin >> *com;
//
c[pointer] = com;
//
pointer++;
//
if (pointer >= MAX) {
//
pointer = MAX - 1;
//
full = true;
}
}
/**
*
*/
void pop() {
//
Comperitor *com = c[pointer];
//
cout << *com;
//
c[pointer] = NULL;
//
pointer--;
//
if (pointer < MIN) {
//
empty = true;
//
pointer = MIN;
}
}
/**
*
*/
bool isEmpty() {
return empty;
}
/**
*
*/
bool isFull() {
return full;
}
};
/**
*
*/
int main() {
Team t;
cout << endl << " :" << endl;
int i = 1;
while (!t.isFull()) {
cout << " " << i << " :" << endl;
t.push();
i++;
};
cout << endl << " :" << endl;
int j = t.getPointer() + 1;
while (!t.isEmpty()) {
cout << " " << j << " :" << endl;
t.pop();
j--;
};
return 0;
}
操作結果を確認します.
:
1 :
: 1
: a
2 :
: 2
: b
3 :
: 3
: c
4 :
: 4
: d
5 :
: 5
: e
:
5 :
: 5
: e
4 :
: 4
: d
3 :
: 3
: c
2 :
: 2
: b
1 :
: 1
: a
入桟、出桟操作が完了しました!
関連リンク:
C/C++学習手札(一)
C/C++学習手札(二)
C/C++学習手札(三)