지우너

C++ 클래스(Class) 본문

Programming/C++

C++ 클래스(Class)

지옹 2024. 5. 30. 11:29

클래스란?

두 학생의 국어, 영어, 수학 점수를 저장하기 위해서는

int kor1, eng1, math1;
int kor2, eng2, math2;


이렇게 6개의 변수가 필요하다. 학생이 100명일 경우 변수의 이름 및 갯수(몇 번째 학생의 것인지)가 헷갈려지는 단점도 존재한다.

객체지향언어에서는 이런 정보들을 객체 단위로 표현하는 것을 더 선호하는 것 같다. 위의 경우는 국어, 영어, 수학 점수가 한 학생이 가진 정보이다. 또 다른 경우를 떠올리면 사과라는 객체를 표현하기 위해 색, 무게, 브릭스(=단맛의 정도), 수확 시기 등을 하나의 사과에 담긴 정보로 묶을 수 있다.
이렇게 하나의 객체에 담긴 여러 정보를 관리하기 위한 것이 클래스이다.

 

클래스 만들기

class Student {
    public:
        int kor, eng, math;
		
        // 생성자(매개변수x)
        Student() {}
        //생성자(매개변수o)
        Student(int kor, int eng, int math) {
            this->kor = kor;
            this->eng = eng;
            this->math = math;
        }
};
int main(){
    Student student1 = Student(90, 80, 90);
    cout << student1.kor << endl;  // 90
    cout << student1.eng << endl;  // 80
    cout << student1.math << endl; // 90
}

 

 

클래스 배열 만들기

(주의!!) 클래스의 배열을 만들 때 매개변수가 없는 생성자를 만들어 두지 않으면 에러가 난다!

int main() {
	// 매개변수가 없는 생성자를 만들어두지 않으면 에러가 난다! Student() {} 
	Student student[5];
	for (int i=0;i<5;i++){
		int kor, eng, math;
		cin >> kor >> eng >> math;
		student[i]= Student(kor, eng, math);
	}
}

 

 

클래스 배열 정렬하기 - operator를 오버라이딩 후 sort()

#include <algorithm> 필수

#include <iostream>
#include <algorithm>
using namespace std;

class Resource{
    public:
        string name, address, region;
    Resource(string name="", string address="", string region=""){
        this->name = name;
        this->address = address;
        this->region = region;
    }
    bool operator <(Resource &resource){
        return this->name >resource.name;
    }
};
int main() {
    int n;
    cin >> n;
    Resource r[10];
    for (int i=0;i<n;i++){
        string input_name, input_address, input_region;
        cin >> input_name >> input_address >> input_region;
        r[i] = Resource(input_name, input_address, input_region);
    }

    // 사전순으로 이름이 가장 느린 사람의 자료를 출력하는 프로그램
    sort(r, r+n);
    
    cout << "name " << r[0].name <<'\n';
    cout << "addr " << r[0].address <<'\n';
    cout << "city " << r[0].region <<'\n';

    return 0;
}

 

클래스 배열 정렬하기 - bool cmp(){}를 sort()의 인자로 넣기

#include <algorithm> 필수

#include <iostream>
#include <algorithm>

using namespace std;

class Student{
    public:
        string name;
        int h ,w;
    Student(){};
    Student(string name, int h, int w){
        this->name = name;
        this->h = h;
        this->w = w;
    }
}; 

bool cmp(Student a, Student b){
    return a.h < b.h;
}
int main() {
    int n;
    cin >> n;
    Student students[n];
    for(int i=0;i<n;i++){
        string name;
        int h, w;
        cin >> name >> h >> w;
        students[i] = Student(name, h, w);
    }
    sort(students, students+n, cmp);
    
    for(int i = 0; i < n; i++)
        cout << students[i].name << " " << students[i].h << " " << students[i].w << '\n';
    return 0;
}

 

우선 순위가 여러 개인 경우

bool cmp(Student a, Student b) { 
    if(a.kor == b.kor)           // 국어 점수가 일치한다면
        return a.eng < b.eng;    // 영어 점수를 기준으로 오름차순 정렬합니다.
    return a.kor < b.kor;        // 국어 점수가 다르다면, 오름차순 정렬합니다.
}