본 내용은 POCU COMP3200: C++ 언매니지드 프로그래밍 강의를 토대로 작성하였습니다.
- 복사 생성자
- 받는 매개변수가 const 나 자신 클래스
- 같은 클래스에 속한 다른 개체를 이용하여 새로운 개체를 초기화
- 같은 크기, 같은 데이터
이건 종이 위에 쓸 수 있을 정도로 숙련하기
- 암시적(implicit) 복사 생성자
- 코드에 복사 생성자가 없는 경우, 컴파일러가 암시적 복사 생성자를 자동 생성
- 암시적 복사 생성자는 얕은 복사(shallow copy)를 수행
- 멤버 별 복사
- 각 멤버의 값을 복사함
- 개체인 멤버변수는 그 개체의 복사 생성자가 호출됨
- 클래스에 포인터 형 변수가 있다면?
프로그래머가 직접 복사 생성자를 만들어줘야함
- 사용자가 만든 복사 생성자
- 클래스 안에서 동적으로 메모리를 할당하고 있다면?
- 얕은 복사가 위험할 가능성이 매우 높음
- 직접 복사 생성자를 만들어서 깊은 복사(deep copy)를 할 것
- 포인터 변수가 가리키는 실제 데이터까지도 복사
- 클래스 안에서 동적으로 메모리를 할당하고 있다면?
- 함수 오버로딩(overloading)
- 매개변수 목록을 제외하고는 모든 게 동일
- 반환형은 상관 없음 (반환형이 달라지면 컴파일러는 어떤 함수를 반환해야할지 모름)
- 함수 오버로딩 매칭하기
- 오버로딩 된 함수 중에 어떤 함수를 호출해야 하는지 판단하는 과정
- 함수 매칭 결과는 3개가 있음
- 매칭되는 함수를 찾을 수 없음 //컴파일 에러
- 매칭되는 함수를 여러개 찾음 //컴파일 에러
- 누굴 호출할지 모호
- 가장 적합한 함수를 하나 찾음 //OK
- 연산자(operator) 오버로딩
- 연산자
- 함수처럼 작동하는 부호
- C++에서는 프로그래머가 연산자를 오버로딩할 수 있음
- 연산자
- 연산자 오버로딩
- C와 Java는 연산자 오버로딩을 지원하지 않음
- 부호는 같지만 여러가지 연산이 가능
- 연산자는 오버로딩 하는 방법은 두가지
- 멤버 함수
- 멤버 아닌 함수
- 멤버 함수를 이용한 연산자 오버로딩
- 연산자 역시 메서드
- 특정 연산자들은 멤버 함수를 이용해서만 오버로딩 가능
- =, () , [] , ->
- friend 키워드
- 클래스 정의 안에 friend 키워드를 사용 가능
- 다른 클래스나 함수가 나의 private 또는 protecte 멤버에 접근할 수 있게 허용
- 클래스 정의 안에 friend 키워드를 사용 가능
- friend 함수
- 연산자 오버로딩에 필요한 friend 함수
- friend 함수는 멤버 함수가 아님
- 하지만 다른 클래스의 private 멤버에 접근할 수 있음
- 연산자 오버로딩과 const
- const를 쓰는 이유?
- 멤버 변수의 값이 바뀌는 것을 방지
- 최대한 많은 곳에 const를 붙일 것!
- 지역(local) 변수에 까지도
- const를 쓰는 이유?
Vector operator+(const Vector& rhs) const;
'C++' 카테고리의 다른 글
#5. 자료구조 (0) | 2022.04.04 |
---|---|
[C++] 상속, 생성자/소멸자 호출 순서, 다형성, 정적/동적 바인딩, 가상 소멸자 (0) | 2022.03.09 |
#4. cast, dynamic_cast, RTTI, friend 클래스 (0) | 2022.02.19 |
[C++] 생성자, 초기화 리스트, 기본 생성자, 컴파일러가 하는 일, 생성자 오버로딩, 소멸자, const 멤버 함수, 구조체 vs 클래스 (0) | 2022.02.14 |
#3. 상속, 캡슐화, 다형성, 가상 함수, 순수 가상함수, 추상 클래스 (0) | 2022.02.13 |
댓글