freeseaboy 님의 멋있어 지려 노력하는 블로그

(베이직 코스)C++ 추상 및 가상 에 대해 알아보자 본문

컴퓨터 & 서버/C++

(베이직 코스)C++ 추상 및 가상 에 대해 알아보자

freeseaboy 2024. 10. 27. 19:22
반응형

자 오늘은 C++

추상 및 업캐스팅 그외 가상에 대해 공부하는 시간을 갖어보자

일단 동영상으로 내용을 정리하였으며...

나중에 도움이 되길 바란다..

글쓴이도 배우는 입장이다 보니 틀린부분은

확실하게 지적해 주면 감사하겠다...

자 동영상을 조져보자!!

그리고 메모자 스크립트 및 코드는 올려놓겠다.

 

!!!긴급!!!

알수없는 이유로 동영상이 차단되어 우회 대피소 

N기업 블로그로 링크 걸어 두었습니다.

https://blog.naver.com/iwseo7114/223635606948

 

 

#include <cstdio>

class Parent{
    public:
    virtual void showPrint(void){
        printf("Parent\n");
    }
};
class Child : public Parent{
    public:
    virtual void showPrint(void){
        printf("Child\n");
    }
};
int main(void){
    Parent* cpParent = new Parent();
    Parent originParent;
    Child* cpChild = new Child();
    cpParent = cpChild;
    cpParent->showPrint(); // Child
    cpChild = dynamic_cast<Child*>(cpParent);// Child
    return 0;
}

#############################################

오늘 같이 공부하며너 배워볼 내용은

C++ 씨쁠쁠 or 씨플러스플러스 등등

- 추상 클래스(Abstract Class)

- 형 변환(Casting)

Base (기반클래스) -> Childern (자식)

Base < method() > ->

선언만

추상클래스 에서는

베이스 클래스 랑 상속 받은 자식 클래스가 있을시

추상클래스는 베이스 클래스가 되며

베이스 클래스내에 특정 동작을하는 자료타입이 아닌 행위를 하는

메소드가 있어야 된다 물론 이때는....

세세하게 선언민 정의된 메소드가 아닌

단순히 가상 선언된 함수의 머리만 있어야 된다..

가상 함수는 두가지...

1.

그냥 가상함수 즉 오버 라이딩 전용 함수 겠죠?

요거는

부모 클래스도 void abc(void); <-x

void abc(void){

printf("ABC");

return;

}

위에 말한 부모클래스를 상속 받은 자식이 있다고 또 쳐봐요

void abc(void)라는 메소드가 있고 내용도 다르게 정의되어 있을시

오버라이딩 이라고 흔히들 말해요.

동적바인딩 어쩌구 런타임시

호출시 타입에 의해 어떤걸 호출할지 결정을 실행중에 한다고해서

동적바인딩 이라 부릅니다.

2.순수 가상 함수....

부모 클래스에서 순수 가상함수를 작성 하고

항상 추가적인 함수 내용은 자식클래스에서만 작성해야된다..

추상클래스는 직접 인스턴스화가 안된다......

기억하자..

우리는 방금 안되는걸 봤다...

순수가상 함수는 = 오로지 템플릿과 비슷하다

즉 상속없이는 사용하기곤란하다....

함수가상함수는 ~어느 클래스안에 존재를 하니깐 만들었겠죠?

그 클래스랑 + 그 함수는 오로지 상속을 통해서만 사용이 가능하다라고 말할수있을거같아요.

자 그리고....제 블로그에 있어요 티스토리랑 네이버에 보면됩니다.

취소

자...캐스팅(데이터의 공간을 줄이거나 늘리거나) 하는행위

- 업

- 다운

동적 형 변환 런타임이냐?

정적 형 변화 컴파일 시간이냐?

기본 C++에서 정의된 타입을 제외한 클래스을 변환하는걸

동적형변환이라고 합니다.

타입 -> 타입

(double) -> (int) 정적 Static Casting

Class -> otherClass 동적 Dynamic Casting 이겠져?

즉 자식클래스는 상속 받은 부모를 참조할수있다...

Children -> Parent 참조 가능

부모는 자식으로 형변환

자식은 부모로 형변환

자식 <-> 부모 둘다 형변환가능이래요...

동적 형변환의 객체는 이미 생성된 라이프 타임이 살아있는

즉 메모리에서 둥둥 떠다니는 객체인거죠?

obj* 이공간에 -> 원하는 클래스 포인터로 할당함으로써 동작한데요

동적 형변환은 Dynamic_cast 연산으로 진행이 된데요..

ObjA = dynamic_cast<class*>(ObjB)

부모 = dynamic_cast<class*>(자식)

자식 = dynamic_cast<class*>

업 자식에서 부모로 변신

다운 부모에서 자식으로 변신

업캐스트 경우는 dynamic_cast 를 안해도된되요..

자식에서 부모로 갈경우 dynamic_cast 안해도됨.

반대로 다운캐스팅은 무조건 명시적으로 알려야 한다 저 연산자를.

NULL 뱉는다

다형성...

그니깐 다운캐스팅 같은경우는

자식이 부모의 주소를 갖져? 그주소에는 메모리 영역이 있어요

자식이 부모의 주소를 갖어도 그 부모가 자식에 대한 정보가 없으면

오류가나요

근데 정보가 있으면 캐스팅이 된다....오케이?

오늘의 배운 내용...

추상 클래스 + 동적 형변환

추상클래스는 아까 뭐랬죠?

혼자서는 절때 인스턴스화가 될수없다.!

누군가 상속 받아서 다시 오버라이딩으로 구성해서 사용해야 된다.!

Pure Virtual Method 꼭 깅ㄱ하세요

캐스팅은 두가지 있죠?

다이나믹

스태틱

스태틱은 .... C++에서 기본적으로 제공하는 타입을 형변환 이게 포인트다.!!

다이나믹은 스태틱 외 모든 클래스를 형변환할때 쓰는 기술이다...

다이나믹에서 업 그리고 다운 이것도 잘 기억하세요...

어차피 내일이면 또 까먹고 잘 모를테지만...

어찌됫든 오늘 진짜 허접한 공부하는 같이 시청해서 고맙습니다!!

그럼 또 다른 영상으로 찾아뵐게요~!

#############################################

 

Abstract!

 

반응형