(0907~0908) C++ 학습일지

런치·2023년 9월 18일
0

C++

목록 보기
5/14

다시 써보기

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)에 대해서 알아야 한다.

  • 숫자 승격 (numeric promotion)
    한 자료형의 값이 더 큰 유사한 자료형의 값으로 변환하는 경우로 데이터 손실 없음
long   l(64);    // int -> long
double d(0.12f); // float -> double
  • 숫자 변환 (numeric conversion)
    큰 자료형의 값이 더 작은 유사한 자료형의 값으로 변환하거나 서로 다른 자료형 간에 변환하는 경우, 데이터 손실이 일어날 수도 있음
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로 바꿔 상속 */
  • 상속의 조건

  1. is a

    Lion is a Animal
    Panda is a Animal /*Lion 과 Panda 는 Animal 이라는 기초 클래스를 상속하는 유도클래스이다.*/

    is a의 조건으로는 상속관계가 있을 때, 아래로 갈 수록 구체화 혹은 특수화(Specialization)가 되어야하며 위로 갈 수록 일반화(Generalization)되어야한다.

    파생클래스는 기본클래스의 모든 특성을 포함하기에 is a관계로 포함.

  2. has a
    has a의 조건으로는 객체 멤버에 의한 포함관계객체 포인터 멤버에 의한 포함관계가 있다.
    상속으로 묶인 두개의 클래스는 결합도가 강해지고 많은 제약을 줄 수있다.

다형성(Polymorphism)

  1. 다양한 형태를 가지는 성질로써, 상위 클래스에 가상 멤버 함수(virtual member function)가 있어야 함
  2. 하위 클래스에서 오버라이딩할 멤버함수가 없다면 상위 클래스의 소멸자를 가상함수로 만든다.
  3. 객체는 상위 클래스의 포인터나 참조자로 만들어야 함
    virtual 키워드로 상위 클래스의 멤버함수 선언시 override 된 하위 클래스의 멤버함수를 사용가능
  4. 상위 클래스의 멤버함수에는 없는 하위 클래스의 멤버함수를 사용하려면 다운캐스팅해야함
    typeid를 사용할 때에는 객체이거나 정의된 클래스로 자료형에 대한 정보 얻을 수 있음
profile
점심을 안먹음

0개의 댓글