다른 질문에서이 문제를 읽었지만 비슷한 것은 없었습니다. 일부는 생성자에서 가상 메서드를 호출하고 나머지는 순수 가상을 호출했습니다. 그러나 여기에있는 질문은 순수하지만 모든 파생 클래스에서 구현할 필요가없는 가상 메서드에 대한 정보를 제공합니다. 인스턴스화 된 클래스가 메소드를 구현하지 않는 경우 호출하면 기본 메소드에서 메소드를 논리적으로 호출하며 때로는 충돌합니다. 궁금 해서요, 왜? VTABLE (입력되는 곳)은 무엇입니까? 그리고 그것을 해결하는 가장 좋은 방법은 무엇입니까.가상 메서드를 호출 할 때 충돌이 발생합니다.
이것은 간단한 예입니다 (순수 가상과 같은 대답은 피하십시오).
#include <iostream>
class Foo
{
public:
virtual std::string myString() {}
};
class Bar : public Foo
{
public:
};
int main(int argc, char ** argv)
{
Foo * bar = new Foo;
bar->myString();
return 0;
}
최상의 해결책은 무엇입니까?
- 던져 주장 사용하여 예외
- (false)를
- 은 기본값에게 몸을 구현
- 피를 반환하며 컴파일 시간 오류가 발생합니다 대안 의
- 없음
가장 좋은 대답은 왜 이것이 VTABLE에 기반하여 발생하는지 설명하는 것입니다. 하나의 해결책을 제시하고 이유를 설명하십시오. 아이디어는 의견을 근거로하지 않는 것입니다.
이 예는 충돌하지 않습니까? 어떤 것을 보여줘. 편집 : 오, 오, 내 않습니다. 나는 당황 스럽다. –
"최고의 솔루션"이란 무엇입니까? –
@ PeterSchneider - 적어도 여기 있습니다. –