지우너
C++ 클래스(Class) 본문
클래스란?
두 학생의 국어, 영어, 수학 점수를 저장하기 위해서는
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; // 국어 점수가 다르다면, 오름차순 정렬합니다.
}
'Programming > C++' 카테고리의 다른 글
생성자(constructor)와 멤버 초기화 리스트(member initializer list) (0) | 2024.08.11 |
---|---|
C++ Set 사용하기 (0) | 2024.08.07 |
C++ Sort()함수 (0) | 2024.05.28 |
[C++] array, string, vector size 구하기 (0) | 2024.05.27 |