2024. 4. 15. 15:31ㆍ자료구조와 게임 알고리즘
클래스 작성 및 객체 생성
접근 지정자
private 멤버는 클래스 안에서만 사용가능
protected 멤버는 클래스 안과 상속된 클래스에서 사용사능
public 멤버는 어디서나 사용가능
접근자와 설정자
#include <iostream>
using namespace std;
class Time {
public:
Time(int h, int m);
void print();
int getHour() { return hour; }
int getMinute() { return minute; }
void setHour(int h) { hour = h; }
void setMinute(int m) { minute = m; }
private:
int hour; // 0-23
int minute; // 0-59
};
int main()
{
Time a{ 0, 0 };
a.setHour(6);
a.setMinute(30);
a.print();
return 0;
}
클래스의 인터페이스와 구현의 분리
복잡한 클래스인 경우에는 멤버 함수를 클래스 외부에서 정의
#include <iostream>
using namespace std;
class Circle {
public:
double calcArea();
int radius; // 반지름
string color; // 색상
};
double Circle :: calcArea() {
return 3.14*radius*radius;
}
int main()
{
Circle c;
c.radius = 10;
cout << c.calcArea() << endl;
}
클래스 선언과 클래스의 정의 분리
생성자
생성자는 오직 한번만 실행된다.
생성자 함수의 이름은 클래스 이름과 동일하게 작성되어야 한다.
생성자 함수의 원령에 리턴 타입은 선언하지 않는다.
생성자는 매개변수를 달리하여 중복 가능하다.
생성자의 중복정의
class Time {
public:
int hour;
int minute;
Time() { // 기본 생성자
hour = 0;
minute = 0;
}
Time(int h, int m) { // 오버로딩 생성자
hour = h;
minute = m;
}
void print() {
cout << hour << ":" << minute << endl;
}
};
Time a;
a.print();
Time b( 10, 25 );
b.print();
Time c { 10, 25 };
c.print();
Time d = { 10, 25 };
d.print();
디폴트 생성자
class Time {
public:
int hour;
int minute;
Time(int h=0, int m=0) {
hour = h;
minute = m;
}
void print() {
cout << hour << ":" << minute << endl;
}
};
Time a;
a.print();
Time b();
b.print();
Time c(10, 25);
b.print();
a는 아예 매개변수 선언을 안했기 때문에 오류가 날 것이고 b는 매개변수는 선언했지만 값이 없기 때문에 0,0으로 초기화 될것이다. 그리고 c는 10, 25로 초기화 된다.
멤버 초기화 리스트
Time(int h, int m) {
hour = h;
minute = m;
}
c++14
Time(int h, int m) : hour(h), minute(m){}
c++11
Time(int h, int m) : hour{h}, minute{m} {}
처음것이 원래 쓰던 초기화 방법이였고 밑에 있는게 최근 나온 초기화 방법이다.
이렇게 바꾼 이유는
1.비용적으로 효율적
기존 방법보다 함수 호출이 적다
기존은
int a;
a = 3;
이런 느낌이였다면
새로운 방법은
int a = 3;
이런 느낌이다.
2. 상수멤버나 참조자 멤버는 무조건 사용
중괄호 초기화
장점
컨테이너에 활용하기 좋음
축소 변화을 방지
오버플로우 오류 발생 방지
소멸자
소멸자의 목적은 객체가 사라질 때 필요한 마무리 작업을 위함이다.
소멸자의 이름은 클래스 이름 앞으로 ~를 붙인다.
소멸자는 리턴 타입이 없으며 어떠한 값도 리턴해서도 안된다.
소멸자는 오직 한개만 존재하며 매개변수를 가지지 않는다.
class Circle {
public:
int radius;
Circle();
Circle(int r);
~Circle(); // 소멸자
double getArea();
};
Circle : : ~Circle() {
cout << "반지름 " << radius << " 원 소멸" << endl;
}
this 포인터
포인터, 객체 자신 포인터
클래스의 멤버 함수 내에서만 사용
멤버 함수에 컴파일러에 의해 묵시적으로 삽입선언되는 매개변수
this가 필요한 경우
매개변수의 이름과 멤버변수의 이름이 같은 경우
객체가 함수의 매개 변수로 전달되는 경우
class Pizza {
public:
Pizza(int s) : size(s) { }
int size; // 단위: 인치
};
void makeDouble(Pizza p){
p.size *= 2;
}
int main(){
Pizza pizza(10);
makeDouble(pizza);
cout << pizza.size << "인치 피자" << endl;
}
객체의 참조자가 함수의 매개 변수로 전달되는 경우
class Pizza {
public:
Pizza(int s) : size(s) { }
int size; // 단위: 인치
};
void makeDouble(Pizza& p) {
p.size *= 2;
}
int main() {
Pizza pizza(10);
makeDouble(pizza);
cout << pizza.size << "인치 피자" << endl;
}
객체 배열
'자료구조와 게임 알고리즘' 카테고리의 다른 글
자료구조_10.큐 (0) | 2024.04.30 |
---|---|
자료구조_09.스택 (0) | 2024.04.15 |
자료구조_08. 시간복잡도 (0) | 2024.04.15 |
자료구조_07.연산자 중복 (0) | 2024.04.15 |
자료구조_05.배열과 벡터 (0) | 2024.03.25 |