교수님, 강의 정말 기다렸어요. 너무너무 반가워요! 교수님 강의는 처음에 들었을때는 좀 어렵다고 생각했는데, 기초문법 한번 훑고 들으니까, 주옥같은 명강의라는 걸 절감합니다. 이해가 깊어지면서, 머릿속에 잘 정리가 돼요! 이왕이면 모던 c++까지 해서 전체적으로 완강하셔서, 인프런이나 유데미 같은데, 수강료 받고 올리셔도 아주 좋을거 같아요. 수강료 지불해도 좋으니, c++전체 완강된 교수님 강의 듣고 싶어요! 교수님 설명 너무 잘하시고요, c++ STL 강의도 괜찮고, 자료구조, 알고리즘 이런것도 괜찮고, 아님 다른 언어도 괜찮고요, 바쁘시겠지만, 수강료 받으시고, 강의 만들어주시면, 후학들에게 큰 도움이 되겠어요.
virtual 함수 호출이 일어나는 메카니즘은, 호출되는 클래스 인스턴스를 가르키는 vtable을 가짐으로써. 그 테이블을 참조하여 해당하는 함수를 호출하는 것으로 압니다. 즉, 클래스는 동적바인딩을 하고, 그 클래스의 함수는 정적바인딩에 지정된대로 동작을 한다고 하고, 디버깅해봐도 그렇게 동작을 하는군요. 그렇다면 여기서 이런 생각이 듭니다. 결국 가상함수 호출은 재귀적인 호출도 가능한 메커니즘 인거 같군요. 즉, 가상함수의 가상함수도 개념적으로는 가능하다는 얘기가 되네요. 그런데 virtual vitual funA () =0; 와 같은 형태를 컴파일러가 지원하지는 않을거 같군요. 실제 해보지는 않았지만요. (아니면 다른형태로..), 나중에 시간이 나면, virtual 의 virtual 호출이 구현되는지도 확인해 보면 재미(?)있을거 같기도 하고, 어쩌면 나중 c++이 버젼업 되면서 추가될런지도 모르겠군요
두들님 질문이용... 1.순수가상함수나 가상함수도 상속이되면 Derived클래스에 상속되나요?? 2.질문 만약에 class A에 멤버함수가 add함수 , mux 함수가 있다고 하고 class B에는 add함수 multi 함수가 있다고 치면 add함수가 공통되잖아요?? 이럴때 부모클래스를 만들고 add함수를 순수가상함수 만들어주면 좋다 그 말씀이신지요?
@@오일중-s8b 애미클래스의 포인터가 애미자신을 가리킬수도있고 자식도 가리킬수있는거죠 그러다보니 어떤 함수가 애미클래스와 자식클래스에 오버로딩 됐을때 만약 애미클래스의 포인터가 새끼클래스를 가리키고있고 메인함수에서 (애미클래스포인터->오버로딩된함수) 이렇게 호출하면 정적바인딩이 일어나서 애미클래쓰에있는 함수가 호출이되는거고 그걸 방지하기위해서 애미클래스 안에 있는 함수앞에 virtual 딱 붙여주면 동적바인딩이 일어나서 새끼클래스안에있는 함수가 작동이 되는거죠. 하지만 여전히 애미클래스의 함수가 호출이 될 여지가 남아있기때문에 그걸 방지할라면 아예 그 가상함수뒤에다가 NULL이나 0을 초기화 시켜서 그냥 완전 순수가상함수를 만들어버리면 되죠. 그럼 그 클래스는 추상클래스가 되서 애미클래스의 포인터도 애미클래스를 가리킬수없게 되서 그런겁니다! 두느님 저 이해 잘 했나요???
현업에 쓸일이 없었는데 유익하네요.
교수님, 강의 정말 기다렸어요. 너무너무 반가워요! 교수님 강의는 처음에 들었을때는 좀 어렵다고 생각했는데, 기초문법 한번 훑고 들으니까, 주옥같은 명강의라는 걸 절감합니다. 이해가 깊어지면서, 머릿속에 잘 정리가 돼요! 이왕이면 모던 c++까지 해서 전체적으로 완강하셔서, 인프런이나 유데미 같은데, 수강료 받고 올리셔도 아주 좋을거 같아요. 수강료 지불해도 좋으니, c++전체 완강된 교수님 강의 듣고 싶어요! 교수님 설명 너무 잘하시고요, c++ STL 강의도 괜찮고, 자료구조, 알고리즘 이런것도 괜찮고, 아님 다른 언어도 괜찮고요, 바쁘시겠지만, 수강료 받으시고, 강의 만들어주시면, 후학들에게 큰 도움이 되겠어요.
쌤 강의 너무 좋아요!! 엉엉엉ㅇ 기다렸어요 ㅠㅠ 10만명 가즈아~
virtual 함수 호출이 일어나는 메카니즘은, 호출되는 클래스 인스턴스를 가르키는 vtable을 가짐으로써. 그 테이블을 참조하여 해당하는 함수를 호출하는 것으로 압니다. 즉, 클래스는 동적바인딩을 하고, 그 클래스의 함수는 정적바인딩에 지정된대로 동작을 한다고 하고, 디버깅해봐도 그렇게 동작을 하는군요. 그렇다면 여기서 이런 생각이 듭니다. 결국 가상함수 호출은 재귀적인 호출도 가능한 메커니즘 인거 같군요. 즉, 가상함수의 가상함수도 개념적으로는 가능하다는 얘기가 되네요. 그런데 virtual vitual funA () =0; 와 같은 형태를 컴파일러가 지원하지는 않을거 같군요. 실제 해보지는 않았지만요. (아니면 다른형태로..), 나중에 시간이 나면, virtual 의 virtual 호출이 구현되는지도 확인해 보면 재미(?)있을거 같기도 하고, 어쩌면 나중 c++이 버젼업 되면서 추가될런지도 모르겠군요
강의 보면서 많이 배웠습니다👍
강의 너무 좋습니다.^^
마지막 delete 할때 for문으로 하셨는데요. for를 사용한 특별한 이유가 있는지요?
delete[] *shapes; 를 사용하면 안되나요?
다른 강의에서 설명한 적은 있는 것 같은데, delete[] shapes;는 동적할당된 배열을 삭제하라는 명령입니다. 지금은 동적 할당된 배열이 있는 게 아니라 배열의 각 칸이 동적 할당된 객체를 가리키고 있죠? 그래서 배열의 각 칸을 해제해 주어야 합니다.
@@두들낙서 아 그렇군요. 답글도 바로 주시고 감사합니다. ^^
아하
가상 함수와 추상 클래스 배우러 와서 포인터배열 다시 되새김하고 갑니다.
언젠가 보면 바로 알 수 있는 포인터 마스터가 되길 ㅋ
강의 너무 좋은거 같아요 다음 강의 기다릴게요!
순수가상함수를 만들 필요가 있나 의문들어서 남깁니다.
어차피 virtual 쓰면 멤버변수든 멤버함수든 오버라이딩 되서 상관 없지 않나요?
쉬운예로 드니까 대가리에 더 쏙쏙들어와요
두들님 질문이용... 1.순수가상함수나 가상함수도 상속이되면 Derived클래스에 상속되나요?? 2.질문 만약에 class A에 멤버함수가 add함수 , mux 함수가 있다고 하고 class B에는 add함수 multi 함수가 있다고 치면 add함수가 공통되잖아요?? 이럴때 부모클래스를 만들고 add함수를 순수가상함수 만들어주면 좋다 그 말씀이신지요?
1. 네, 맞습니다.
2. 네, 공통적인 기능을 add라는 한가지 메서드로 해결해주고 싶을 때 순수 가상 함수를 사용하면 좋습니다.
센세~ 오랜만이에욥 !
delete s; 하면 오류나는데 왜그러죠?
팬이에요!
79강 끝부분 delete 코드 추가는
...
for (Message* m : message) {
delete m;
}
delete p_dogImage;
...
요런식으로 하면되나요?
delete[] message; 가 왜 안되는지 설명해주실 수 있나요?
10개월전이지만..
message가 동적 할당 된 것이 아니기 때문입니다.
동적 할당 된 포인터를 요소로 가지고 있는 것이 message이고 message 자체는 그냥 배열이기 때문이에요.
추상클래스 면 객체를 못만든다고 하셧는데 Shape *shapes[] = 이런식으로 어떻게만들어진거죠>? Shape 클래스는 분명 순수가상함수가존재한데 궁금합니다~
제가 봤을땐 포인터라서 포인터배열이라서 엄마가 자기자신을 안가리키고 자식들을 가리키는거라서 괜찮은겁니다. 만약 엄마함수자기자신을 가리켰다면 빨간줄이그어졌겠죠. 왜냐면 순수가상함수이기때문이죠.. 그리고 포인터로 안만들었더라도 마찬가지로 빨간줄뜰듯..
@@kohy741 엄마가 자기자신을 안가리키고 자식들을 가리키는게 무슨말인지 잘이해가 안되서요 Shape는 어쨋든 추상클래스인데 어떤부분에서 자기자신을 가리킨거가요?
방구석 방구석 아 죄송 제 답변 “엄마함수”가 아니라 “엄마클래스” 라고 해야겠네여 아 “엄마객체” 인가? 암튼간에 shape이 엄마클래스잖아요? 그니까 엄마클래스는 자기 자신을 가리킬수도 있고 자식새키들도 가리킬수있자나요. 근데 저렇게 엄마클래스를 추상클래스로 만들어놓으면 자식들만 가리킬수있고 자기자신은 못가리키죠. 다시말해서, 추상클래스면 객체를 못만든다는뜻은 자기자신소속의 객체만 못만드는거고 자식새키들클래스의 객체들은 만들수있음 포인터로
방구석 이 전 동영상에서 두느님이 그림으로 알기쉽게 설명해놓으셨음 가서 보고오세여 17:30초 쯤에 엄마클래스가 애기클래쓰가리키는 그림
@@오일중-s8b 애미클래스의 포인터가 애미자신을 가리킬수도있고 자식도 가리킬수있는거죠 그러다보니 어떤 함수가 애미클래스와 자식클래스에 오버로딩 됐을때 만약 애미클래스의 포인터가 새끼클래스를 가리키고있고 메인함수에서 (애미클래스포인터->오버로딩된함수) 이렇게 호출하면 정적바인딩이 일어나서 애미클래쓰에있는 함수가 호출이되는거고 그걸 방지하기위해서 애미클래스 안에 있는 함수앞에 virtual 딱 붙여주면 동적바인딩이 일어나서 새끼클래스안에있는 함수가 작동이 되는거죠. 하지만 여전히 애미클래스의 함수가 호출이 될 여지가 남아있기때문에 그걸 방지할라면 아예 그 가상함수뒤에다가 NULL이나 0을 초기화 시켜서 그냥 완전 순수가상함수를 만들어버리면 되죠. 그럼 그 클래스는 추상클래스가 되서 애미클래스의 포인터도 애미클래스를 가리킬수없게 되서 그런겁니다! 두느님 저 이해 잘 했나요???
안녕하세요. 궁금한게있는데요. Get()함수는 항상 const ( return ~) 이렇게 const 붙여줘야한다고 했었는데, 이번꺼에서는 GetArea()에 왜 const를 붙이면 안되는건가요. 그리고 const를 붙이면 실행이 안되는데 왜 그런건가요
강의 감사합니다!
2020.02.16기준 80강 생존자 534명
흥흥 명강의
올만이에연~
두들두들 낙서낙서