вы можете объяснить мне, почему:Насколько это виртуально?
int main (int argc, char * const argv[]) {
Parent* p = new Child();
p->Method();
return 0;
}
печатает "ребенка :: Метод()", а это:
int main (int argc, char * const argv[]) {
Parent p = *(new Child());
p.Method();
return 0;
}
печатает "Родитель :: Method()"?
Классы:
class Parent {
public:
void virtual Method() {
std::cout << "Parent::Method()";
}
};
class Child : public Parent {
public:
void Method() {
std::cout << "Child::Method()";
}
};
спасибо, Etam.
Я уверен, что нарезка не является причиной симптомов в этом случае. – quamrana
Любой ответ на этот вопрос должен содержать концептуальное объяснение того, как полиморфизм применяется только к указателям и ссылкам, а во втором случае «p» не является ни тем, ни другим. Говоря о разрезе, вы не предоставляете «настоящий» ответ. Это побочный эффект того, что происходит, но не отвечает на исходный вопрос. – psychotik
Я с @konrad. Настоящая причина заключается не в том, что у вас нет указателя или ссылки. Но настоящая причина заключается в том, что объект не относится к типу 'Child'. И это вызвано нарезкой. –