1. 프렌드 함수
• 클래스의 멤버 함수가 아닌 외부 함수
• 전역 함수
• 다른 클래스의 멤버 함수
• friend 키워드로 클래스 내에 선언된 함수
• 클래스의 모든 멤버를 접근할 수 있는 권한 부여
• 함수의 정의는 외부에서 수행
• 프렌드 선언의 필요성 : cout << …, 2 + person,
• 클래스의 멤버로 선언하기에는 무리가 있고, 클래스의 모든 멤버를 자유롭게 접근할 수 있는 일부 외부 함수 작성 시
1-1. 프렌드 함수 예
2. 연산자 중복
• 함수를 만들어 사용하는 것 보다, 연산자를 사용하여 표현하는 것이 이해하기 쉬움
• 연산자들을 클래스 객체(= 내가 정의한 자료형)에 대해서도 적용하는 것
• 컴파일러가 함수처럼 변환해줌
• C++에서는 연산자를 함수로 정의
• 특징
• C++에 본래 있는 연산자에 대해 중복 가능하지만, 모든 연산자가 중복 가능한 것은 아님
• 피 연산자 타입이 다른 새로운 연산 정의
• 반드시 클래스와 관계를 가짐
• 주의할 점
• 새로운 연산자를 만드는 것은 허용되지 않음
• 내장된 자료형에 대한 연산자의 의미를 변경 불가능
• 연산의 우선 순위나 결합법칙은 변경 안됨
• 피연산자의 개수를 바꿀 수 없음
• 일관성을 위하여 관련 다른 연산자도 overloading 하는 것이 좋음
• 일반적으로 산술 연산자와 관계 연산자는 비멤버 함수로 정의
• 할당 연산자는 멤버 함수로 정의
2-1. 연산자 함수
• 이항 연산자
• 클래스의 멤버 함수로 구현
• 외부 함수로 구현하고 클래스에 프렌드 함수로 선언
• 이항 연산자
• 클래스의 멤버 함수로 구현
• 외부 함수로 구현하고 클래스에 프렌드 함수로 선언
• 기본 자료형과의 연산을 위한 연산자
• 클래스의 멤버 함수로 구현
• 외부 함수로 구현하고 클래스에 프렌드 함수로 선언
• 외부함수로 구현하고 클래스에 프렌드 함수로 선언만 가능한 경우
• 다른 자료형과의 연산을 위한 연산자
• 클래스의 멤버 함수로만 구현이 가능한 경우
• 대입 연산자(=), 함수 호출 연산자(()), 배열 원소 참조 연산자([]), 멤버 참조 연산자(->)
• 컴파일러에 의한 변환
• 클래스의 멤버 함수로 구현
• 외부 함수로 구현하고 클래스에 프렌드 함수로 선언
2-2. 스트림 연산자 중복
• 전역 함수 형태만 사용 가능
• 연산 수행 후, stream 객체인 ostream, istream 참조자를 반환해야 함
• >> 연산자는 잘못된 입력의 오류처리를 해주는 것이 좋음
• 구현 방법
2-3. 대입 연산자 중복
• 반드시 현재 객체의 reference 반환
• 동적 할당 공간이 있으면 얕은 복사 문제를 방지하기 위해 반드시 중복 정의 해야함
2-4. 멤버함수로만 구현 가능한 연산자 중복
• 구현 방법
3. 상속
• 기존에 존재하는 유사한 클래스로부터 속성과 동작을 이어받고 자신이 필요한 기능을 추가하는 기법
• 자식 클래스는 부모 클래스를 포함하는 is-a 관계
• 여러 단계로 상속 가능
• 장점
• 기존 클래스의 속성과 동작을 재사용 및 일부 변경 가능
• 이미 작성된 검증된 소프트웨어를 재사용하여 복잡한 소프트웨어를 손쉽게 개발, 유지 보수 가능
• 코드의 중복을 줄일 수 있음
3-1. 상속의 표현
• 상속 선언
• Student 클래스는 Person 클래스의 멤버를 상속
• StudentWorker 클래스는 Student 클래스의 멤버를 상속
• Student가 상속받은 Person의 멤버도 함께 상속
3-2. 파생 클래스의 객체 구성