Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 레이캐스팅
- 스플릿키보드
- Cloud Spanner
- 파이썬
- 쿠버네티스
- 어셈블리어
- 42seoul
- 어셈블리
- 스타트업
- 이노베이션아카데미
- mistel키보드
- enable_if
- schema first
- 부동소수점
- 도커
- 42서울
- uuid-ossp
- GraphQL
- 엣지컴퓨팅
- raycasting
- 동료학습
- 자료구조
- 텍스트북
- 정렬
- 창업
- 프라이빗클라우드
- adminbro
- c++
- SFINAE
- psql extension
Archives
- Today
- Total
written by yechoi
[C++] 생성자/ 참조자 생성자/ const 생성자/ 객체 배열 생성자/ 소멸자 본문
반응형
생성자
클래스의 이름과 함수의 이름이 동일하다
반환형이 선언돼 있지 않으며, 실제로 반환하지 않는다
객체 생성시 딱 한 번 호출된다
오버로딩이 가능하다
class SimpleClass { private: int num1; int num2; public: SimpleClass() { num1 = 0; num2 = 0; } SimpleClass(int n) { num1 = n; num2 = 0; } SimpleClass(int n1, int n2) { num1 = n1; num2 = n2; } };
첫번째 방식의 생성자를 쓰려면
SimpleClass sc1; SimpleClass *ptr1 = new SimpleClass; SimpleClass *ptr = new SimpleClass(); # forbidden SimpleClass sc1(); // 함수의 원형을 지역적으로 선언하는 형태
멤버 생성자를 이용해 생성자를 만들려면
class Rectangle
{
private:
Point upLeft;
Point lowRight;
public:
Rectangle::Rectangle(const int &x1, const int &y1, const int &x2, const int &y2)
:upLeft(x1, y1), lowRight(x2, y2)
{
}
}
const, 참조자 생성자
생성자를 이용하면 선언과 동시에 초기화가 이뤄지는 형태로 바이너리 코드가 생성된다. 반면 생성자의 몸체부분에서 대입연산을 통한 초기화를 진행하면, 선언과 초기화를 각각 별도의 문장에서 진행하는 형태로 바이너리 코드가 생성된다.
const 변수는 선언과 동시에 초기화를 해야하므로, 이니셜라이저를 이용해 초기화를 한다
class FruitSeller { private: const int APPLE\_PRICE; int numOfApples; int myMoney; public: FruitSeller(int price, int num, int money) : APPLE\_PRICE(price), numOfApples(num), myMoney(money) { } };
마찬가지로 참조자도 선언과 동시에 초기화를 해야하므로, 이니셜라이저를 이용해 초기화를 한다
class AAA { public: AAA() { } }; class BBB { private: AAA &ref; const int # public: BBB(AAA &r, const int &n) :ref(r), num(n) { } }; int main(void) { AAA obj1; BBB obj2(obj1, 20); ... }
객체 배열 생성자
# AAA 클래스 배열 정적 선언
AAA arr\[10\];
# AAA 클래스 배열 동적 선언
AAA \*ptrArr = new AAA\[10\];
- 생성자에 인자를 전달하지 못한다
- 그러므로 일일히
소멸자
- 객채 소멸시 반드시 호출
- 클래스의 이름 앞에 '~'가 붙은 형태의 이름
- 반환형이 선언돼 있지 않으며, 실제로 반환하지 않음
- 매개변수는 void형으로 선언돼야 하기 때문에, 오버로딩과 디폴트 값 설정 불가
반응형