아마
Derived a;
Parent b(a);
b.func()
했을때 동작이 다를껄요? - dc App
익명(examine2859)2025-03-15 00:15
답글
아 이거말고 포인터로 받을때인듯 - dc App
익명(examine2859)2025-03-15 00:16
답글
맞음
Derived a;
Parent* b = (Parent*)&a;
b->func();
했을 때 virtual이 안붙어 있는 함수면 Parent::func를 호출하게 됨. vtable에 Derived::func에 대한 맵핑이 안되어있기 때문에
익명(211.117)2025-03-15 00:53
답글
override 키워드는 단순히 Parent Class에 존재하지도 않는 함수에 대해서 virtual을 붙혀서 무의미하게 vtable 크기 늘리는 실수를 최소화 하기 위한 키워드
익명(211.117)2025-03-15 00:55
vtable 구축이 되냐 안되냐 아닌가 virtual override 해줘야 제대로 될텐데
익명(113.153)2025-03-15 00:36
1. 하위 클래스에서 상위 클래스의 멤버 함수 시그니쳐를 동일하게 만드는게 멤버 함수 오버라이딩임
2. 동적 바인딩을 위해 1번에다 가상 함수를 만드는거고 - dc App
프로그래밍(nowadays3724)2025-03-15 01:22
답글
음 다른갤에다가도 물어봤었는데 가상함수를 쓰지않는 단순 재정의는 오버라이딩이라고 부를수 없다고하는데 어떻게 생각함?
익명(218.237)2025-03-15 01:25
답글
오버라이딩은 하위클래스에서 재정의하고 동적바인딩이 돼서 런타임시간에 가상함수테이블에서 자식클래스에서 오버라이딩된 함수를 찾아서 호출해줌
단순히 같은 함수를 또 만드는건 정적바인딩이라 컴파일시간에 포인터 타입에 맞는 함수로 호출하기로 결정함
문제는 상위클래스의 함수가 숨겨져서 하위클래스 객체가 상위클래스의 함수를 호출할 때 에러남
이렇게 알려주던데
익명(218.237)2025-03-15 01:26
답글
1. 단순 재정의를 오버라이딩이라 부를 수 없는가? 는 모르겠음. 오버라이딩을 가상함수와 함께 쓰는게 일반적이긴 한데, 단언해서 말 못하겟는디.
2. 상위클래스의 함수가 숨겨졌는데, 어떻게 하위 클래스의 객체가 상위 클래스의 함수를 호출할 때 에러가 나는지 모르겟네.
프로그래밍(nowadays3724)2025-03-15 02:09
ㅇㅇ 맞음 오버라이딩이라 하는 이유는 vtavle 에 실제로 덮어쓰기 때문임
익명(211.47)2025-03-15 04:03
오버라이딩은 이미 댓글에 잘 소개되어 있는거 같고 하이딩이라는거도 중요함 보통은 새로운 함수를 정의하면 오버로딩인데 저 경우엔 하이딩임 감춰진 부모 멤버함수들을 사용하려면 using을 써줘야 함
뭔 씨1발 개좆같은 말인가 했더니 메서드 하이딩도 자바에서 나온 말이냐? c++에선 그딴거 없고 부모함수 재정의 == 오버라이딩 땅땅땅임
https://www.linkedin.com/pulse/understanding-function-hiding-c-object-oriented-yamil-garcia-fruwc
이글에선 구분하던데 틀린거야?
c#에서 new 키워드랑 override가 왜 따로있겠니
아마 Derived a; Parent b(a); b.func() 했을때 동작이 다를껄요? - dc App
아 이거말고 포인터로 받을때인듯 - dc App
맞음 Derived a; Parent* b = (Parent*)&a; b->func(); 했을 때 virtual이 안붙어 있는 함수면 Parent::func를 호출하게 됨. vtable에 Derived::func에 대한 맵핑이 안되어있기 때문에
override 키워드는 단순히 Parent Class에 존재하지도 않는 함수에 대해서 virtual을 붙혀서 무의미하게 vtable 크기 늘리는 실수를 최소화 하기 위한 키워드
vtable 구축이 되냐 안되냐 아닌가 virtual override 해줘야 제대로 될텐데
1. 하위 클래스에서 상위 클래스의 멤버 함수 시그니쳐를 동일하게 만드는게 멤버 함수 오버라이딩임 2. 동적 바인딩을 위해 1번에다 가상 함수를 만드는거고 - dc App
음 다른갤에다가도 물어봤었는데 가상함수를 쓰지않는 단순 재정의는 오버라이딩이라고 부를수 없다고하는데 어떻게 생각함?
오버라이딩은 하위클래스에서 재정의하고 동적바인딩이 돼서 런타임시간에 가상함수테이블에서 자식클래스에서 오버라이딩된 함수를 찾아서 호출해줌 단순히 같은 함수를 또 만드는건 정적바인딩이라 컴파일시간에 포인터 타입에 맞는 함수로 호출하기로 결정함 문제는 상위클래스의 함수가 숨겨져서 하위클래스 객체가 상위클래스의 함수를 호출할 때 에러남 이렇게 알려주던데
1. 단순 재정의를 오버라이딩이라 부를 수 없는가? 는 모르겠음. 오버라이딩을 가상함수와 함께 쓰는게 일반적이긴 한데, 단언해서 말 못하겟는디. 2. 상위클래스의 함수가 숨겨졌는데, 어떻게 하위 클래스의 객체가 상위 클래스의 함수를 호출할 때 에러가 나는지 모르겟네.
ㅇㅇ 맞음 오버라이딩이라 하는 이유는 vtavle 에 실제로 덮어쓰기 때문임
오버라이딩은 이미 댓글에 잘 소개되어 있는거 같고 하이딩이라는거도 중요함 보통은 새로운 함수를 정의하면 오버로딩인데 저 경우엔 하이딩임 감춰진 부모 멤버함수들을 사용하려면 using을 써줘야 함