다시 써보기
Queue() {} // 기본 생성자
Queue(const Queue& rhs){ memberwise copy } // 복사 생성자
~Queue() {} //소멸자
Queue& operator=(const Queue& rhs) { memberwise copy } // 대입 연산자 오버로딩
Queue operator&() {} // 주소 연산자 오버로딩
const Queue operator&() const{} // 주소 연산자 오버로딩
explicit (명시적)
explicit
을 알기 위해선 C++ Compiler 에서 일어나는 암시적 변환(implicit conversion)
에 대해서 알아야 한다.
long l(64); // int -> long
double d(0.12f); // float -> double
double d = 3; // int -> double ( type 이 다른 경우)
short s = 2; // int -> short (더 큰 자료형에서 작은 자료형으로)
C++ 에서는 explicit
키워드를 통해서 암시적 변환을 할 수 없도록 컴파일러에게 알려 줄 수 있다.
extern
extern
은 다른 cpp
에 존재하는 전역변수
를 참조할 때 사용하거나,
외부에 있는 함수
를 가져올 때 사용한다.
+) extern "C"
는 C++ 컴파일러가 정의된 함수 혹은 헤더파일에 대해 맹글링하지 말라는 의미
상속 (inherit)
상위(부모/기초) 클래스의 내용 ( 속성, 메소드 ) 를 하위(자식/파생) 클래스가 물려받는 것
접근제어 지시자
1.public
: 어디에서든 멤버 변수와 메소드에 접근 가능
class Example : public p_class /*상속 선언시 private를 제외하고 상속 */
2.private
: 외부에서는 접근 불가
class Example : public p_class /*상속 선언시 private를 제외한 것들을 private로 상속 */
3.protected
: 하위(자식)클래스 에서만 해당 멤버 변수에 접근 가능하고 외부는 접근불가
class Example : protected p_class /*상속 선언시 public을 protected로 바꿔 상속 */
상속의 조건
is a
Lion is a Animal
Panda is a Animal /*Lion 과 Panda 는 Animal 이라는 기초 클래스를 상속하는 유도클래스이다.*/
is a
의 조건으로는 상속관계가 있을 때
, 아래로 갈 수록 구체화
혹은 특수화(Specialization)
가 되어야하며 위로 갈 수록 일반화(Generalization)
되어야한다.
파생클래스는 기본클래스의 모든 특성을 포함하기에 is a
관계로 포함.
has a
has a
의 조건으로는 객체 멤버에 의한 포함관계
나 객체 포인터 멤버에 의한 포함관계
가 있다.
상속으로 묶인 두개의 클래스는 결합도가 강해지고 많은 제약을 줄 수있다.
다형성(Polymorphism)
가상 멤버 함수(virtual member function)
가 있어야 함 virtual
키워드로 상위 클래스의 멤버함수 선언시 override
된 하위 클래스의 멤버함수를 사용가능typeid
를 사용할 때에는 객체이거나 정의된 클래스로 자료형에 대한 정보 얻을 수 있음