ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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;
    }

     

    ※얕은복사를 하면 아래와 같은 상황이 되어 

    소멸할 때 문제가 발생함

    댓글

Designed by Tistory.