본문 바로가기

Programming/C++ 2

[C++] 10장-5. 객체 배열

반응형

객체배열 : 같은 클래스에 속하는 여러개의 객체의 배열

-> 표준 데이터형의 배열을 선언하는 것과 동일한 방법

 

Stock mystuff[4]; //4개의 Stock 객체로 이루어진 배열 생성

 

명시적으로 초기화되지 않은 클래스 객체를 생성할 때, 프로그램은 항상 디폴트 클래스 생성자를 호출한다.

 

[생성자를 정의하지 않았거나(이경우 암시적 디폴트생성자가 생성), 하나의 명시적인 디폴트 생성자를 정의가 필요하다]

 

mystuff[0].update(); //제 1 원소에 update()를 적용
mystuff[3].show(); //제 4원소에 show()를 적용

const Stock* tops=mystuff[2].topval(mystuff[1]);
//제 3원소와 제2원소를 비교해 보다 높은 수준의 전체값에 맞춘다.

 

const int STKS=4;

Stock stocks[STKS]={
Stock("NanoSmart", 12.5, 20),
Stock("Boffo Objects",200,2.0);
Stock("Monolithic Obelisks", 130, 3.25);
Stock("Fleep Enterprises", 60, 6.5)
};

-> 배열을 초기화하는 표준 형식을 사용

-> 배열의 값들을 콤마로 서로 분리하고 전체를 중괄호로 묶는다.

-> 생성자의 메서드에 대한 각각의 호출이 배열의 값이 된다.

-> 클래스가 생성자를 하나 이상 가지고 있으면, 배열의 각 원소마다 서로 다른 생성자를 사용할 수 있다.

 

const int STKS=10;
Stock Stocks[STKS] = {
Stock("NanoSmart", 12.5, 20),
Stock(),
Stock("Monolithic Obelisks", 130, 3.25)
};

-> Stock(const char* co, int n, double pr)생성자를 사용해  stocks[0]과 stocks[2]를 초기화

-> Stock() 생성자를 사용해 stocks[1]을 초기화

[나머지는 디폴트 생성자를 사용해 초기화]

 

1. 디폴트 생성자를 사용해 배열의 원소들을 생성

2. 중괄호 안에 있는 생성자들이 임시객체를 생성하고, 배열원소에 복사

[즉, 객체배열을 생성하기 위해서는 하나의 디폴트 생성자를 가져야한다.]

 

4개의 배열의 원소를 초기화하고 내용을 출력해 주식 가치가 가장 큰 원소를 알아내는 프로그램

[topval()은 두 객체만 검사하기 때문에, for루프를 이용.]

[어떤 요소가 높은 값을 지니고 있는지 찾기위해 pointer-to-stock 사용]

//usestok2.cpp

#include <iostream>
#include "stock20.h"

const int STKS = 4;

int main()
{
	//초기화된 객체들의 배열을 생성
	
	Stock stocks[STKS] = {
	Stock("NanoSmart", 12.5, 20),
	Stock("Boffo Objects",200, 2.0),
	Stock("Monolithic Obelisks", 130, 3.25),
	Stock("Fleep Enterprises", 60, 6.5)
	};

	std::cout << "보유 주식 리스트: \n";
	int st;
	for (st = 0; st < STKS; st++)
		stocks[st].show();

	//첫번째 원소에 포인터 지정
	const Stock* top = &stocks[0];
	for (st = 1; st < STKS; st++)
	{
		top = &top->topval(stocks[st]);
	}

	//가장 가치 있는 주식의 최고치
	std::cout << "\n최고 가지의 주식: \n";
	top->show();
	return 0;
}

 

반응형