[클래스 작성 및 객체 생성]
- 클래스?
속성과 기능이 묶여 담겨있는 것이다.
클래스는 객체의 설계도 이다. 클래스가 만든 객체를 인스턴스라고 한다.
[접근 지정자]
- private 클래스 안에서만 사용 될 수 있다.
- protected 클래스 안과 상속된 클래스에서 사용 될 수 있다.
- public 누구나 사용 될 수 있다.
[접근자와 설정자]
[클래스]
- 클래스의 인터페이스와 구현의 분리
복잡한 클래스인 경우에는 멤버 함수를 클래스 외부에서 정의
- 클래스의 선언과 클래스의 정의 분리
[클래스 생성자]
- 생성자의 중복 정의
생성자는 매개변수를 달리하여 중복 가능하다.
* 매개 변수가 없는 생성자를 안 만들고 매개 변수가 있는 생성자만 있는 경우 기본 생성자가 실행되지 않기 때문에 매개 변수가 있는 생성자를 만들 때 매개 변수가 없는 생성자도 같이 만들어 줘야 사용 했을 때 오류가 나지 않는다.
- 디폴트 생성자
Time a는 위에서 설명한 것 처럼 오류가 나지만, Time b는 디폴트 값이 있기 때문에 오류가 나지 않는다.
[멤버 초기화 리스트]
// 기본 c++ 생성자 문법
Time (int h, int m)
{
hour = h;
minute = m;
}
// 모던 c++ 생성자 문법
Time(int h, int m) : hour(h), minute(m){} // c++ 14
Time(int h, int m) : hour{h}, minute{m}{} // c++ 11
모던 c++ 생성자 문법의 좋은 점
1. 비용적으로 효율적이다.
원래 문법의 생성자는 생성자를 호출하고 대입도 하는 2번의 함수 호출이 일어난다.
초기화 리스트에 넣는다는 것은, 대입이 아닌 초기화를 수행한다는 것이다. 한 번의 생성자 호출로 초기화가 가능하다!
2. 상수 멤버나 참조자 멤버는 무조건 사용!
모던 c++ 생성자 문법은 매개 변수를 대입해 주는 것이 아니라 초기화를 해주는 것이다.
[중괄호 초기화]
중괄호를 사용해서 초기화를 하면 오류를 띄워준다.
[this 포인터]
포인터, 객체 자신의 포인터 이다. 클래스의 멤버 함수 내에서만 사용한다.
멤버 함수에 컴파일러에 의해 묵시적으로 삽입 선언되는 매개 변수 이다.
- this가 필요한 경우
매개 변수의 이름과 멤버 변수의 이름이 같은 경우
멤버 함수가 객체 자신의 주소를 리턴할 때 (연산자 중복 시에 매우 필요하다.)
[클래스 실습 문제]
- 객체가 함수의 매개 변수로 전달되는 경우
#include <iostream>
using namespace std;
class Pizza
{
public:
int size;
Pizza() {};
Pizza(int s) : size(s) {};
};
void makeDouble(Pizza pizza)
{
pizza.size *= 2;
}
int main()
{
Pizza pizza(10);
makeDouble(pizza);
cout << pizza.size << "인치 피자" << endl;
return 0;
}
- 객체의 참조자가 함수의 매개 변수로 전달되는 경우
#include <iostream>
using namespace std;
class Pizza
{
public:
int size;
Pizza() {};
Pizza(int s) : size(s) {};
};
void makeDouble(Pizza &pizza)
{
pizza.size *= 2;
}
int main()
{
Pizza pizza(10);
makeDouble(pizza);
cout << pizza.size << "인치 피자" << endl;
return 0;
}
[객체 배열]
// Book 이라는 클래스가 있을 때
Book books[2] =
{
Book("GGM", 25000),
Book("HIGH SCHOOL", 22000)
};
// 총 2개의 book 클래스를 묶은 배열을 만든 것이고
// 둘을 생성자를 통해 초기화 해줬다.
'C++ 자료구조' 카테고리의 다른 글
시간복잡도 기초 (0) | 2024.04.15 |
---|---|
[c++] 연산자 중복 (오버로딩) (0) | 2024.04.02 |
[c++] vector (0) | 2024.03.26 |
[c++] 배열 (0) | 2024.03.25 |
[c++] 제어 구조와 함수 (0) | 2024.03.19 |