14.3 예외처리 클래스 상속과 객체 잘림에 대하여 질문 있습니다.
390
작성한 질문수 2
클래스는 Exception 클래스와 Exception 클래스를 상속받은 ArrayException 클래스를 선언 했습니다.
보시는 바와 같이 메인 함수에서 doSomething 함수를 호출합니다.
그리고 doSomething 함수 내부에서 my_array[100]에서 오버로딩한 [ ] 연산자 함수를 호출합니다.
그러면 오버로딩한 [ ] 연산자 함수에서 예외가 발생하여 throw에 의해서 ArrayException타입 객체를 기본 생성자를 호출하여 생성된 객체를 doSomething 함수의 내부에 있는 catch에 넘겨줍니다.
그렇게 되면 catch 옆에 (Exception& e) 처럼 값에 의한 전달이 아닌 참조에 의한 전달로 객체 자체를 넘겨줍니다. 그러면 Exception 클래스를 상속받은 ArrayException객체 자체를 e로 넘겨줍니다. 그리고나서 e.report()를 통해서 report 함수에 구현된 내용이 실행됩니다.
여기서 제가 궁금한것이 있습니다. 객체 잘림현상은 참조에 의한 전달이 아닌 값에 의한 전달에서 발생한다고 배웠는데 어째서인지 값에 의한 전달이 아닌 참조에 의한 전달로 객체 자체를 전달 했음에도 코드 실행 결과는 ArrayException클래스에서 구현한 report 함수의 내용이 아닌 Exception클래스에서 구현한 report 함수의 내용이 실행됩니다.
제가 알고있는 객체 잘림 현상에 대한 지식이 잘못된 것인지 아니면 예외 처리 클래스의 상속에 대해한 객체 잘림 현상이 특별한 경우인지 아니면 단순히 throw e와 throw의 차이인지 궁금합니다.
그다음에 메인 함수에서도 (Exception& e)에 값에의한 전달이 아닌 참조에 의한 전달로 객체 잘림이 발생한 ArrayException클래스 타입의 객체가 전달됩니다. 그리고 Exception 클래스에서 구현한 report 함수가 실행됩니다.
여기서는 doSomething 함수의 내부에서 객체 잘림 현상이 발생해서 Exception 클래스에서 구현한 report 함수가 실행된거라고는 이해가 됩니다.
그러면 왜 doSomething 함수 내부에서 객체 잘림이 발생한 것인지 궁금해서 질문 드립니다.
긴글 읽어주셔서 감사합니다.
답변 2
1
안녕하세요?
처음 질문은 이전에도 비슷한 질문이 있었는데 https://www.inflearn.com/questions/42161 를 참고해보시면 좋을 것 같습니다.
두번째는 doSomething 함수 안에서 Exception을 던졌기 때문에 바깥에서도 Exception으로 받은 것입니다. typeid.name() 등을 통해서 확인해보셨으면 좋겠습니다. typeid 에 대해서는 https://en.cppreference.com/w/cpp/language/typeid 를 참고하시면 도움이 될 것이라 생각합니다.
변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠
1
465
1
메모리 주소 10진수로 출력
1
653
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
498
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
534
1
메모리 주소에 관한 질분
0
679
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
549
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
443
1
Digit 뒤에 reference를 사용하는 이유
0
510
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
322
1
dat파일이...
0
538
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
643
1
복사 생성자 관련 질문이 있습니다.
0
454
1
수업 중 궁금한점이 있습니다.
1
389
1
라이브러리자체가 이해가 되지 않습니다.
0
561
1
마지막 예제 질문
0
302
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
374
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
410
1
friend함수 관련 질문이 있습니다.
0
311
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
447
1
3분 17초 질문
0
350
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
447
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
443
2
const Something &st에서 const를 빼면 안되나요?
0
300
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
492
1





