[C++]4.2クラス-レプリケーション作成者
5006 ワード
咀嚼C++学習講座のノート.
new Class, delete Class[n]
マーリン1はマーリン2を攻撃するコード. そんなやり方でマリンを一つ一つ作るのは難しい.ではnewでやりましょう.結果は同じ newはmallocにメモリを割り当てているようですが、少し違います クラスジェネレータ. CとC++の最大の違い. しましたnew、必ず削除してください. 消滅者
結果は良かった. メモリリークの問題が発生. C++このような事態を防ぐため、「消滅者」(Destructor)をサポートする. 消滅者を使う.
使用消滅者確認結果、クラス削除時に自動的に消滅者が呼び出されることを確認できます. deleteが消滅者のクラス(メモリを追加したクラス)を使用して消滅しなければならない場合は、上のdeleteクラス[n]を使用してどのクラスを削除するかを指定する必要があります. 消滅を必要としない者は使わなくてもいいし、Default消滅者もいる.
new Class, delete Class[n]
ユーツゲーム、才気蹴り、花図など韓国の伝統民俗ゲームのスターウォーズ1のマリンをC++で体現しましょう.#include <iostream>
class Marine {
int hp; // 마린 체력
int coord_x, coord_y; // 마린 위치
int damage; // 공격력
int is_dead;
public:
Marine(); // 기본 생성자
Marine(int x, int y); // x, y 좌표에 마린 생성
int attack(); // x, y 좌표에 마린 생성
void be_attacked(int damage_earn); //입는 데미지
void move(int x, int y); // 새로운 위치
void show_status(); // 상태 띄우기
};
Marine::Marine(){
hp = 50;
coord_x = coord_y = 0;
damage = 5;
is_dead = false;
}
Marine::Marine(int x, int y){
coord_x = x;
coord_y = y;
hp = 50;
damage = 5;
is_dead = false;
}
void Marine::move(int x, int y){
coord_x = x;
coord_y = y;
}
int Marine::attack(){
return damage;
}
void Marine::be_attacked(int damage_earn){
hp -= damage_earn;
}
void Marine::show_status(){
std::cout << "** Marine **" << std::endl;
std::cout << " Loacation : ( " << coord_x << ", " << coord_y << ")" << std::endl;
std::cout << " HP : " << hp << std::endl;
}
int main(){
Marine marine1(2,3);
Marine marine2(3,5);
marine1.show_status();
marine2.show_status();
std::cout << std::endl << "마린 1 이 마린 2 를 공격!" << std::endl;
marine2.be_attacked(marine1.attack());
marine1.show_status();
marine2.show_status();
}
#include <iostream>
class Marine {
int hp; // 마린 체력
int coord_x, coord_y; // 마린 위치
int damage; // 공격력
int is_dead;
public:
Marine(); // 기본 생성자
Marine(int x, int y); // x, y 좌표에 마린 생성
int attack(); // x, y 좌표에 마린 생성
void be_attacked(int damage_earn); //입는 데미지
void move(int x, int y); // 새로운 위치
void show_status(); // 상태 띄우기
};
Marine::Marine(){
hp = 50;
coord_x = coord_y = 0;
damage = 5;
is_dead = false;
}
Marine::Marine(int x, int y){
coord_x = x;
coord_y = y;
hp = 50;
damage = 5;
is_dead = false;
}
void Marine::move(int x, int y){
coord_x = x;
coord_y = y;
}
int Marine::attack(){
return damage;
}
void Marine::be_attacked(int damage_earn){
hp -= damage_earn;
}
void Marine::show_status(){
std::cout << "** Marine **" << std::endl;
std::cout << " Loacation : ( " << coord_x << ", " << coord_y << ")" << std::endl;
std::cout << " HP : " << hp << std::endl;
}
int main(){
Marine marine1(2,3);
Marine marine2(3,5);
marine1.show_status();
marine2.show_status();
std::cout << std::endl << "마린 1 이 마린 2 를 공격!" << std::endl;
marine2.be_attacked(marine1.attack());
marine1.show_status();
marine2.show_status();
}
int main(){
Marine * marine[100];
marine[0] = new Marine(2,3);
marine[1] = new Marine(3,5);
marine[0]->show_status();
marine[1]->show_status();
std::cout << std::endl << "마린 1 이 마린 2 를 공격" << std::endl;
marine[1]->be_attacked(marine[0]->attack());
marine[0]->show_status();
marine[1]->show_status();
delete marine[0];
delete marine[1];
}
消滅者
マーリンに名前をつけて、コンパイルしてください.class Marine {
int hp; // 마린 체력
int coord_x, coord_y; // 마린 위치
int damage; // 공격력
char * name; // 이름
int is_dead;
public:
Marine(); // 기본 생성자
Marine(int x, int y); // x, y 좌표에 마린 생성
Marine(int x, int y, const char* marine_name); // x, y 좌표에 이름을 가진 마린 생성
int attack(); // x, y 좌표에 마린 생성
void be_attacked(int damage_earn); //입는 데미지
void move(int x, int y); // 새로운 위치
void show_status(); // 상태 띄우기
};
Marine::Marine(){
hp = 50;
coord_x = coord_y = 0;
damage = 5;
name = NULL;
is_dead = false;
}
Marine::Marine(int x, int y){
coord_x = x;
coord_y = y;
hp = 50;
damage = 5;
name = NULL;
is_dead = false;
}
Marine::Marine(int x, int y, const char* name){
coord_x = x;
coord_y = y;
hp = 50;
damage = 5;
name = new char[strlen(name) +1];
is_dead = false;
}
...
class Marine {
int hp; // 마린 체력
int coord_x, coord_y; // 마린 위치
int damage; // 공격력
char * name; // 이름
int is_dead;
public:
Marine(); // 기본 생성자
Marine(int x, int y); // x, y 좌표에 마린 생성
Marine(int x, int y, const char* marine_name); // x, y 좌표에 이름을 가진 마린 생성
int attack(); // x, y 좌표에 마린 생성
void be_attacked(int damage_earn); //입는 데미지
void move(int x, int y); // 새로운 위치
void show_status(); // 상태 띄우기
};
Marine::Marine(){
hp = 50;
coord_x = coord_y = 0;
damage = 5;
name = NULL;
is_dead = false;
}
Marine::Marine(int x, int y){
coord_x = x;
coord_y = y;
hp = 50;
damage = 5;
name = NULL;
is_dead = false;
}
Marine::Marine(int x, int y, const char* name){
coord_x = x;
coord_y = y;
hp = 50;
damage = 5;
name = new char[strlen(name) +1];
is_dead = false;
}
...
name = new char[strlen(name) +1];
ただしクラス内にメモリが付与された後は削除されていないコードが使用される.class Marine {
int hp; // 마린 체력
int coord_x, coord_y; // 마린 위치
int damage; // 공격력
char * name; // 이름
int is_dead;
public:
Marine(); // 기본 생성자
Marine(int x, int y); // x, y 좌표에 마린 생성
Marine(int x, int y, const char* marine_name); // x, y 좌표에 이름을 가진 마린 생성
~Marine(); // 소멸자
int attack(); // x, y 좌표에 마린 생성
void be_attacked(int damage_earn); //입는 데미지
void move(int x, int y); // 새로운 위치
void show_status(); // 상태 띄우기
};
Marine::Marine(){
hp = 50;
coord_x = coord_y = 0;
damage = 5;
name = NULL;
is_dead = false;
}
Marine::Marine(int x, int y){
coord_x = x;
coord_y = y;
hp = 50;
damage = 5;
name = NULL;
is_dead = false;
}
Marine::Marine(int x, int y, const char* marine_name){
coord_x = x;
coord_y = y;
hp = 50;
damage = 5;
name = new char[strlen(marine_name) +1];
strcpy(name, marine_name);
is_dead = false;
}
Marine::~Marine() {
std::cout << name << " 의 소멸자 호출 ! " << std::endl;
if (name != NULL) {
delete[] name;
}
}
使用
Reference
この問題について([C++]4.2クラス-レプリケーション作成者), 我々は、より多くの情報をここで見つけました https://velog.io/@psh4204/C-4.2-복사-생성자テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol