웅재의 코딩세상

C++ 클래스 객체를 배열로 선언 본문

개념/c++

C++ 클래스 객체를 배열로 선언

웅드 2023. 11. 18. 17:00
Stock s[4] = {
    Stock("A",10,1000),
    Stock("B",20,1200),
    Stock("C",20,1200),
    Stock("D",20,1200)
};

 

위와 같이 s라는 이름의 Stock형 배열 3개를 선언되었다.

 

배열의 원소는 , 를 사용해 구분해 주어야 한다.

 

각 배열의 원소에 해당되는 생성자를 호출하여 그 생성자에 할당되어 있는 값마다 각 원소로 대입되게 된다.

 

일반적으로 배열을 사용하는 것과 같이 그 배열의 인덱스로 부터 다시 멤버 함수를 호출할 수 있다.

 

s[0].show();

 

배열의 첫 번째 원소인 Stock A가 지정되어 그 A에 할당 되어있는 정보가 출력되는 것을 확인할 수 있다.

 

4개의 배열 원소를 생성하고 그 배열 원소들에게 각각 또 다른 생성자를 할당해 주는 것이기 때문에

 

★ 클래스를 배열로 생성하기 위해서는 default 생성자가 반드시 정의되어 있어야 한다.

 

Stock first = s[0];
for(int i=1; i<4; i++)
    first = first.topVal(s[i]);
    
first.show();

 

배열의 원소들을 비교하여 가장 주가가 높은 원소를 출력하는 코드이다.

 

topVal함수는 함수를 호출한 객체나 함수의 매개변수로 받은 객체에 shareVal을 비교하여 리턴을 하게 되는데

 

그 리턴형을 보게 되면 두 객체에 대한 참조를 리턴하기 때문에 topVal에 참조 연산자를 붙여주어야 한다.

 

main에서 Stock first에 s배열의 첫 번째 원소의 값을 직접적으로 대입하는 것이 아니라 그 주소에 대한 첫 번째 원소에 대한 포인터를 지정하는 방법을 사용할 수도 있다. 아래처럼!!

Stock &Stock::topVal(Stock& s){
    if(s.share_val > share_val)
    	return s;
    else return *this;
}

그럼 이제 메인문도 바꾸어 보면

Stock *first = &s[0];
for(int i=1; i<4; i++)
    first = &first->topval(s[i]);
first->show();

이렇게 바꾸어 줄 수 있다.

반응형

'개념 > c++' 카테고리의 다른 글

C++ friend  (0) 2023.11.18
C++ 연산자 오버로딩  (1) 2023.11.18
C++ 추상화와 클래스  (1) 2023.11.18
C++ 분할 컴파일  (0) 2023.11.18
C++ template  (0) 2023.11.17