<main.cpp>
#include <iostream>
#include "squad.h"
#include "soldier.h"
using namespace std;
int main(){
Squad *b = new Squad ("번개 분대");
Soldier *s1, *s2, *s3;
s1 = new Soldier("일병", "홍길동");
s2 = new Soldier("이병", "김길동");
s3 = new Soldier("병장", "박길동");
b->addSoldier(s1); b->addSoldier(s2); b->addSoldier(s3);
b->stat();
s1->speak();
s2->speak();
b->setName("천둥 분대");//rename
s1->speak();
return 0;
}
<soldier.cpp>
#include <iostream>
#include "squad.h"
#include "soldier.h"
Soldier::Soldier(const char *rank, const char *name){
rank_=rank;
name_=name;
}
void Soldier::speak(){
std::cout<<rank_<<" "<<name_<<"! 소속 분대는 "<<army_<<" 입니다."<<std::endl;
}
void Soldier::getSquad(std::string name){
army_=name;
}
std::string Soldier::getRank(){
return rank_;
}
std::string Soldier::getName(){
return name_;
}
<squad.cpp>
#include <iostream>
#include "squad.h"
#include "soldier.h"
Squad::Squad(const char *army){
squad_=army;
num_soldier=0;
}
void Squad::addSoldier(Soldier *sd){
soldier[num_soldier]=sd;
soldier[num_soldier]->getSquad(squad_);
num_soldier++;
}
std::string Squad::getSoldier(){
return this->squad_;
}
void Squad::stat(){
std::cout<<squad_<<std::endl;
std::cout<<"총원 "<<num_soldier<<"명\n";
for(int i=0;i<num_soldier;i++){
rank_=soldier[i]->getRank();
name_=soldier[i]->getName();
std::cout<<rank_<<" "<<name_<<std::endl;
}
std::cout<<std::endl;
}
void Squad::setName(std::string n){
squad_=n;
//모든분대원들을 돌면서 각 분대원에게 접근해서 getSquad()
for(int i=0;i<num_soldier;i++){
soldier[i]->getSquad(squad_);
}
}
<soldier.h>
#ifndef _SOLDIER_H
#define _SOLDIER_H
#include <string>
class Squad;
class Soldier{
public:
Soldier(const char *rank,const char *name);
void speak();
void getSquad(std::string name);
std::string getRank();
std::string getName();
// void getSquad(std::string name):
//std::string getSquad();
private:
Squad *squad_;
std::string rank_;
std::string name_;
std::string army_;
};
#endif
<squad.h>
#ifndef _SQUAD_H
#define _SQUAD_H
#include <string>
class Soldier;
class Squad{
public:
Squad(const char *army); //생성자
void addSoldier(Soldier *sd);
std::string getSoldier();
std::string getRank();
std::string getName();
void stat();
void setName(std::string n);
private:
Soldier *soldier_;
std::string army_;
std::string squad_;
std::string rank_;
std::string name_;
Soldier *soldier[10];
int num_soldier;
};
#endif
<실행결과>
번개 분대
총원 3명
일병 홍길동
이병 김길동
병장 박길동
일병 홍길동! 소속 분대는 번개 분대 입니다.
이병 김길동! 소속 분대는 번개 분대 입니다.
일병 홍길동! 소속 분대는 천둥 분대 입니다.
'C++ > 클래스 헤더파일 분리와 상호참조' 카테고리의 다른 글
클래스 상호참조 (수강신청 예제) (0) | 2021.01.27 |
---|---|
클래스 상호참조 (family 예제) (0) | 2021.01.27 |
클래스 상호참조 (애견학교 예제) (0) | 2021.01.23 |