가상 기능 및 런타임 호출의 기본 개념을 알고 있습니다.누군가 가상 기능에 대해이 동작을 설명 할 수 있습니까?
A& A::operator=(char) //expected output
A& A::operator=(const A&) //Why this Output? in case of *ap2 = b2;
b2
B
형식의 개체이지만 여전히 가상 A& operator=(const A&)
에 간다 -이 :하지만이 프로그램을 실행 나에게
class A {
public:
A& operator=(char) {
cout << "A& A::operator=(char)" << endl;
return *this;
}
virtual A& operator=(const A&) {
cout << "A& A::operator=(const A&)" << endl;
return *this;
}
};
class B : public A {
public:
B& operator=(char) {
cout << "B& B::operator=(char)" << endl;
return *this;
}
virtual B& operator=(const B&) {
cout << "B& B::operator=(const B&)" << endl;
return *this;
}
};
int main() {
B b1;
B b2;
A* ap1 = &b1;
A* ap2 = &b1;
*ap1 = 'z';
*ap2 = b2;
}
을 혼동 코드의 일부 조각을 실행 시도 나에게 다음과 같은 출력을 제공 이 아닌 입니다. 이게 왜 그렇게?
Chalesworth의 유효한 형태입니다 함수 호출 및하지의 종류 중 포인터 유형 문제 객체는 가리키는 포인터입니다. 가상 함수의 경우 실제로 발생합니다. 왜냐하면 여기서 ap2는 A의 포인터 유형이지만 B 유형의 객체를 가리키고 있기 때문에? 나는 어딘가 잘못인가? – Invictus
@Ritesh :'* ap2 = b2' 라인에서,'* ap2'의 컴파일 타임 타입은'A'입니다. 따라서 컴파일러는 'A'가 나타내는 인터페이스에있는 (가상) 멤버 함수 만 고려할 수 있습니다. –