호출 예약
호출 내역
추천 내역
신고
  1주일 보지 않기 
카카오톡 공유
https://instiz.net/name/45555440주소 복사
   
 
로고
인기글
필터링
전체 게시물 알림
신설 요청
혹시 미국에서 여행 중이신가요?
여행 l 외국어 l 해외거주 l 해외드라마
l조회 696
이 글은 4년 전 (2021/9/26) 게시물이에요

부모클래스의 멤버함수를 자식클래스에서 고쳐쓰는게 오버라이딩이라는건 알겠는데

다형성에서 가상함수 얘기에서 오버라이딩이 뭔 의미인지 모르겠어...ㅠㅠ

대표 사진
익인1
가상함수는 부모 자식 객체를 모두 부모포인터에 넣어서 사용할때
실체가 자식이면 오버라이드된 자식 메서드로 바꿔서 실행 하는게 목적인거로 알아

4년 전
대표 사진
글쓴이
첫째줄은 만약에 부모를 super 자식을 sub라고 두면 메인에 super *p = new sub() 이런식으로 할당한거처럼 사용할때라는건 알겠는데 실체가 자식이라는게 어떤의미인거야..? ㅠㅠ 우선 답변 너무고마워 더 공부해야겠다
4년 전
대표 사진
익인1
여기서 p.함수()를 실행햇을때 sub에 오버라이드 된 함수()가 실행되는게 가상함수
일꺼야... 배운지 오래돼서 자신없뜸 ㅠㅠ

첫째줄이 무슨소리인지는 잘모르겟당

4년 전
대표 사진
글쓴이
원래는 부모께 실행이되는데 자식의 함수가 실행되는게 가상함수라는거지? 내가 제대로 못적어서 이해를 못했나보다 미안해 ㅠㅠㅠ 그리고 답변해주려고해줘서 고마워
4년 전
대표 사진
익인1
핵심은 그게 맞아
테스트 코드를 한번 돌려보는게 젤 와닿을꺼야

4년 전
대표 사진
글쓴이
1에게
늦었지만 도와줘서 너무 고마워!! 덕분에 공부하는데 도움 많이 되었어 ㅎㅎ

4년 전
대표 사진
익인2
오버라이딩=재정의, 함수가 다른 동작을 하게 하고 싶다는 뜻
자식 클래스가 부모 클래스랑 다른 동작을 하게 하고 싶으면 오버라이딩 하면되고 아니면 안해도돼 (순수 가상 함수 아니면)

4년 전
대표 사진
글쓴이
순수가상함수면 무조건 자식클래스에서 함수가 다른동작(오버라이딩)을 해야하는거구?... 약간 이해가될거같기도하다 답변 고마워요 ㅠㅠ 혼자 더 공부해야지
4년 전
대표 사진
익인2
응 그래서 파생 클래스들이 다 다른 동작을 해야 될 경우는 순수 가상으로 선언하고, 만약 무조건 다 다른 동작은 할 필요 없이 어떤 건 기본 동작대로 해도 되면 비순수 가상으로 선언하면돼
그리구 가상 함수가 아니어도 재정의가 가능은 하지만 가상 함수로 선언하는 이유는 비가상 함수라면 호출될 함수가 익인1이 말한 대로 '정적 타입'대로 함수가 결정돼 정적 타입이 무슨 말인지 모를 것 같아서 설명하자면
Super* p처럼 변수를 선언할 때의 타입이 Super*로 정적 타입이고, 동적 타입은 실제 객체의 정체라고 생각하면 돼 즉 예를 들어 Super* p=new Sub() 이라면 정적 타입은 Super이지만 실제 동적 타입은 Sub인거지 그래서 가상 함수로 func라는 함수가 있다면, p.func()를 한다면 Super가 아닌 Sub 클래스의 func가 실행이 돼
근데 만약 가상 함수가 아니라면? p.func()를 하면 정적 타입이 Super이므로 Super클래스의 func가 실행이 돼. 그러면 psuper가 Super*가 아니라 Sub*여서 Sub* p=new Sub()여야 p.func()를 했을 때 Sub의 func()가 실행되겠지?
그래서 가상 함수면 "실제 객체"의 함수를 호출하고, 비가상 함수라면 진짜 정적타입대로.. 선언한 변수 타입 대로 함수가 결정되는거양
그리구 정적 타입 동적 타입은 완벽한 용어인지는 모르겠어 Effective C++이라는 책에서 이런 식으로 설명해주는데 나는 이 설명이 이해가 잘 됐거든 ~! 용어가 어쨌든 이렇게 동작하는 건 맞아!

4년 전
대표 사진
글쓴이
혹시 시간이 괜찮다면 지금 내가 이해해서 정리한게 맞는지 확인해줄수있을까?
우선 원래 super *p = new sub() 이렇게 포인터 클래스를 선언하고 부모랑 자식 클래스에 둘다 이름 같은 가상함수가 아닌 함수 print가 있는데, p.print()를 하면 부모 클래스 위주의 부모께 나와. 근데 나는 p.print()로 자식클래스의 print가 나왔으면 좋겠으니까 부모 클래스의 함수를 virtual 함수로 만들어 그러면 부모 클래스안에 있는 가상함수가 자식클래스 안에 있는 함수로 덮어씌어지게되고 이 과정이 익인2가 말한 오버라이딩 즉 함수를 고쳐쓰는 과정인거지? 이까지 이해하고 다시 익인2가 말한거 이해해볼게.. 혹시 시간이 안된다면 내 댓글 무시해도 괜찮아..ㅎㅎ 이미 많이 도와줘서 진짜 고마워!!

4년 전
대표 사진
익인2
아냐 시간 많아~! 응 맞아 가상 함수가 아니면, 그러니까 비가상함수면 부모께 나오는 게 맞아 그 경우에! 근데 오버라이딩은 비가상함수를 또 재정의 해도 오버라이딩이라고 하긴 해 그냥 진짜 오버라이딩=재정의라서,, 근데 가상 함수를 오버라이딩해야 실제 객체 대로 함수가 실행되니까 가상 함수를 오버라이딩하라고 하는 거얌
4년 전
대표 사진
글쓴이
2에게
오우 진짜 지금 몇번씩 보니까 약간 이해되는거같아... 정적타입 동적타입에대해서 제대로 알려줘서고마워 ㅠㅠ virtual을 사용하면 원래는 컴파일러가 정적타입으로 즉 포인터가 가리키는 객체가아닌 포인터의 자료형을 기준으로 함수를 호출하는데 virtual을 사용하면 동적타입 즉 포인터가 가리키는 객체를 기준으로 함수를 호출한다는거지.. 진짜 고마워 ㅠㅠ 지금 익인2 말 참고하면서 인터넷으로 계속 공부하는데 약간씩 이해될거같아 ㅎㅎ 진짜 고마워 늦은밤 잘자구 내일도 좋은일만 가득하길!

4년 전
대표 사진
익인2
글쓴이에게
응응 마자!!! 화이팅!

4년 전
대표 사진
글쓴이
2에게
ㅠㅠ 한번더 진짜 너무 고마워 알려준거 바탕으로 스스로 찾아보면서 해결했다 ㅎㅎ 좋은일만 가득해!

4년 전
   
로그인 후 댓글을 달아보세요


이런 글은 어떠세요?

전체 HOT정보/소식팁/자료기타댓글없는글
혹시 제품개발이나 가전회사 다니는 사람 있어?????1
09.29 18:11 l 조회 251 l 추천 1
라즈베리파이 아는사람 ㅠㅠㅠㅠㅠ2
09.29 18:05 l 조회 246 l 추천 1
다들 대외활동같은거 해??2
09.29 16:21 l 조회 570
개발익들아 제발 도움.., 나 첫출근..,17
09.29 10:49 l 조회 2797 l 추천 1
프로그래밍하는 익들아 조언좀 ㅜㅜㅜㅜ1
09.28 19:40 l 조회 776
실전에서 비전공자, 초대졸, 고졸 많나요?11
09.28 18:38 l 조회 2695
나 내일 첫 출근하는데 이건 걸러라 하는 거 있으면 알려줘.., 4
09.28 18:34 l 조회 1080
웹퍼블/프론트엔드 쪽 국비로 다니기 어때?13
09.28 17:18 l 조회 2578
인텔리제이랑 MySQL 도와주세요!ㅠㅠ1
09.28 16:41 l 조회 347
컴공 1학년인데 어떻게 공부해야할지 감이 안온다..5
09.28 16:08 l 조회 1449
익드롸 키보드 뭐써??5
09.28 14:58 l 조회 911 l 추천 2
프론트 쪽으로 넘어가고 싶은 퍼블리셔 조언 좀 부탁해3
09.28 10:05 l 조회 1911
맥북 에어 무조건 16기가야?3
09.27 21:00 l 조회 1062
이거 원래 이렇게 뜨는거야?2
09.27 19:27 l 조회 386
휴학하고 인턴 vs 휴학하고 알바하면서 스펙쌓기9
09.27 12:43 l 조회 1860
포트폴리오말이야3
09.27 11:35 l 조회 1289
가상 API 만들어주는 사이트 아는사람...?6
09.27 11:30 l 조회 806
프론트 개발자 취업시 자격증 뭐 있으면 좋을까??6
09.27 10:27 l 조회 1647
안드 채팅 소켓으로 만드려는데 어렵다🥲1
09.26 20:54 l 조회 398 l 추천 2
c 쁠쁠에서 정확히 오버라이딩이 어떤 의미야?14
09.26 18:16 l 조회 696


처음이전136137138139140다음
전체 인기글
일상
연예
드영배
22:52