C & C++/C++ (7) 썸네일형 리스트형 [C++] virtual 가상함수 (소멸자) 소멸자 virtual을 쓰는 이유는? 상속하고 있는 클래스를 타입이 다른 포인터로 소멸할때 virtual이 없으면 오버라이딩 현상이 적용되지 않아 메모리 해제에 있어 메모리 누수(leak) 발생 class classA{ public: classA(); virtual ~classA(); }; 호출순서로 확인할 수 있는 이유 생성자 호출 순서 ( 1.부모 → 2.자식 ) 소멸자 호출 순서 ( 1.자식 → 2.부모 ) 부모클래스로 소멸자를 호출하였을때 자식클래스의 소멸자가 호출되지 않는 사태를 막기 위해 사용 클래스 상속 , 동적할당시 반드시 사용 할 것을 권장 생성자 참고 https://coding-house.tistory.com/28 [C++] virtual 가상함수 (생성자) 가상함수: 기본 클래스의 멤.. [C++] virtual 가상함수 (생성자) 가상함수: 기본 클래스의 멤버함수를 정의할때 그 함수가 가상함수라면, 파생클래스가 상속받았을때 재정의되는 함수 일반 상속관계 class class AAA{ public: void Print() { cout [C++] 바인딩 (정적 바인딩 & 동적 바인딩) 정의 바인딩 : 함수를 호출하는 부분에 함수가 위치한 메모리 번지를 연결시켜 주는 것 1) 정적 바인딩 : 컴파일시간에 바인딩 결정(실제 데이터 클래스가 필요 없는 경우 대부분 사용:실행속도 빠름) 2) 동적 바인딩 : 실행시간에 따라 바인딩 결정. virtual화 하여 오버라이딩을 하면 참조된 인스턴스의 실제 데이터 클래스형에 따라 재정의된 함수가 호출. 공통된 인터페이스를 제공 상위가 하위에 접근 가능 추상 클래스사용시 용이 정적 바인딩 & 동적 바인딩 동적 바인딩을 정적 바인딩처럼 쓰기 위해서 virtual화 시킵니다. virtual화 된후에는 메모리 구조가 변경됩니다. #include class Halbe{ public: virtual void disp(){ cout [C++] 생성자&소멸자의 오버로딩/오버라이딩 오버로딩(Overloading) 함수의 이름이 같고 매개변수의 반환형, 매개변수의 개수가 다른 조건을 만족해야 사용가능 (함수의 반환형만 다를경우는 오버로딩 불가) 오버라이딩(Overriding) 함수의 이름이 같고 상속관계에서 이루어지는 사용방식으로 매개변수, 리턴타입 또한 모두 동일해야만 사용가능 생성자 소멸자 오버로딩 (overloading) ○ X 오버라이딩 (overriding) X X [C++] 구조체/클래스 차이 (구조체) struct는 접근제한자의 default값이 public (클래스) class는 접근제한자의 default값이 private C언어 내에서의 구조체가 기본적으로 public 권한을 갖고 있기 때문에 호환성을 위하여 C++ 구조체 내에서도 동일한 권한을 보유 구조체 내부에서도 접근제한자를 private로 사용 할 수 있음 구조체 내부에 멤버함수를 사용하는 경우 이를 클래스로 바꿔 선언하는 것이 바람직함 [C++] 구조체 사용 방법 및 C와 C++의 구조체 차이 C언어 typedef struct ST{ int kor[2], eng[2]; } ST; int main(){ ST s; } 또는 struct ST{ int kor[2], eng[2]; }; int main(){ struct ST s; //전부 작성해야 함 } C++ struct ST{ //C++에서는 ST를 tag로 인식하여 struct를 붙여사용하지 않아도 사용가능 int kor[2], eng[2]; } int main(){ ST s; //C++에서는 ST만 사용해도 가능 } [C/C++] 메모리 구조 데이터 영역 (Data Area) 전역변수, static변수 힙 영역 (Heap Area) 프로그래머 동적할당 스택 영역 (Stack Area) 지역변수, 매개변수 C언어도 동일 이전 1 다음