나는,이 경우이예외 처리 + 다형성, 예외 방법 경우 나던 작업, 같은 클래스에서 나던 작품은
//A.hpp
class A{
public:
A() {}
virtual const char *message() const {return "A ERROR";}
};
//B.hpp
#include "A.hpp"
class B:public A {
public:
B() {}
const char *message() const {return "B ERROR";}
};
//main.cpp
#include "A.hpp"
#include "B.hpp"
void foo(const A& a) {
/* case 1 */ throw a; /* (or) */ /* case 2 */ throw B(); // LINE 100
}
int main() {
B b;
A &a(b);
b.message(); // OUTPUT: B ERROR
try {
foo(a);
} catch (const A& a) {
std::cout<<"EXCEPTION CALLED "<<a.message()<<std::endl;
}
return 0;
}
같은 몇 가지 코드를 시도하고있다 : 가 던져를; // a는 B b의 참조입니다. 출력 : 오류
사례 2 : throw B(); // 새로운 B를 만듭니다; 출력 : B 오류
이해가 안 무엇, 당신은 참조로 전달하는 경우, 모든 시간을, 어떤 일관성이 있어야한다
이가지 경우 betweek 일관성이 존재하지 않는 이유, 을 함수 내부에 새로운 변수를 만들면 try 블록에서 호출되고 올바른 가상 메서드가 호출됩니다. 그렇지 않으면 아무도 제어 흐름을 말할 수 없습니다 .... 조언하십시오. ...
: 난 그냥 (또한 복제라고도 함) 가상 사본처럼이 기지를 통해 복사를 해결할 수 있음을 지적 할 필요를 느끼지 완전성을 위해서 –
나는 무엇이 어떤 조건 하에서 던져 지는지 정확히 알 수 없었다. 방금 try 또는 try 내부에서 a가 선언되면 다른 동작이 있다는 것을 마지막 문장에서 확인했습니다. 이처럼 변수 이름 "a"를 재사용 할 이유가 ** 없기 때문에 이것을 정리하는 것이 현명한 것 같습니다. 왜 누군가가 그것이 나쁜 생각이라고 생각하는지 확신하지 못합니다. – Tod
downvote는 당신의 충고가 나쁘기 때문에가 아닙니다. 좋은 조언입니다. 문제의 답이 아니기 때문입니다. –