-
09 클래스(3)-판매 실습,얕은복사Studies/C++ 2022. 2. 3. 18:13
1.Salesman 클래스
(1)Salesman.h
#pragma once #include<string> using namespace std; class Salesman { private: string name; double sales; public: Salesman(); ~Salesman(); Salesman(string name, double sales); void setName(string name); void readInput(); string getSalesmaninfo(); double getSales() { return sales; } };
(2)Salesman.cpp
#include "Salesman.h" #include<iostream> Salesman::Salesman() :name("noname"),sales(0.0) { } Salesman::~Salesman() { } Salesman::Salesman(string name, double sales) :name(name),sales(sales) { } void Salesman::setName(string name) { this->name = name; this->sales = sales; } void Salesman::readInput() { cout << "이름과 판매액을 입력 하세요 : "; cin >> name >> sales; } string Salesman::getSalesmaninfo() { return "이름 : "+this->name +",판매액 : "+to_string(this->sales); }
2.SalesReport 클래스
(1)SalesReport.h
#pragma once #include "salesman.h" class SalesReport { private: Salesman*team; double highestSales; double averageSales; int highestSalesindex; int number; public: SalesReport(); ~SalesReport(); SalesReport(int number); void computeStats(); Salesman& getBestClerk(); string getTeaminfo(); SalesReport& getTeam(); };
(2)SalesReport.cpp
#include "SalesReport.h" SalesReport::SalesReport() :number(0),team(NULL) { } SalesReport::~SalesReport() { if(team!=NULL) delete[] team; } SalesReport::SalesReport(int number) :number(number) { team = new Salesman[number]; for (int i = 0; i < number; i++) { team[i].readInput(); } } void SalesReport::computeStats() { this->highestSalesindex = 0; this->highestSales = team[0].getSales(); this->averageSales = team[0].getSales(); for (int i = 1; i < number; i++) { averageSales += team[i].getSales(); if (this->highestSales < team[i].getSales()) { this->highestSales = team[i].getSales(); this->highestSalesindex = i; } } this->averageSales = this->averageSales / this->number; } Salesman& SalesReport::getBestClerk() { return team[this->highestSalesindex]; } string SalesReport::getTeaminfo() { return to_string(this->number); } SalesReport& SalesReport::getTeam() { // TODO: 여기에 반환 구문을 삽입합니다. return *this; }
3.main 함수(얕은복사의 오류)
#include "SalesReport.h" #include<iostream> using namespace std; int main() { /*SalesReport team1(3); team1.computeStats(); team1.getBestClerk().setName("우수사원"); cout << team1.getBestClerk().getSalesmaninfo() << endl;*/ //멤버 복사(얕은복사) /*Salesman greenjoa1("홍길동", 100); Salesman greenjoa2(greenjoa1); cout << greenjoa1.getSalesmaninfo() << endl; cout << greenjoa2.getSalesmaninfo() << endl; */ //얕은복사에서 소멸할 때 문제가 생김 SalesReport team1(3); SalesReport team2(team1); cout << team1.getTeaminfo() << endl; cout << team2.getTeaminfo() << endl; return 0; }
※얕은복사를 하면 아래와 같은 상황이 되어
소멸할 때 문제가 발생함
'Studies > C++' 카테고리의 다른 글
10 클래스 생성을 통한 문제해결 -클래스의 생성자 및 소멸자에 대한 이해 (0) 2022.02.04 08 클래스 실습-주사위 게임 (0) 2022.01.31 08 클래스(2)-생성자와 소멸자 (0) 2022.01.28 07 클래스(1) (0) 2022.01.25 06 동적할당 (0) 2022.01.24