을 사용 후에도 슬라이스 및 파생 클래스 원 공개적으로 Shape를 상속C++ - 객체 포인터
class Circle : public Shape
나는 모양 포인터의 C++ 벡터를했고, 나는에 원 포인터를 할당 그들. 나는 벡터에서 Circle을 Shape이 아닌 Circle으로 취급하는 코드를 예상하여 객체 조각을 많이 읽었습니다.
출력이 주어지면 누구에게이 문제가 잘못되었음을 지적 할 수 있습니까?
int main(void) {
vector<Shape*> shapes;
Circle* ncl = new Circle(-8, -8, 0.2f);
shapes.push_back(ncl);
cout << "Expected: " << *ncl << endl;
cout << "Reality: " << *shapes[0] << endl;
}
출력 : 나는 범위 중 두 클래스의 < < 연산자를 무시, 그래서 나는 그 문제가 아니라 생각하지만, 여전히
Expected: Circle is at: -8,-8 and has a radius of: 0.2
Reality: Shape centered at point: -8,-8
- 여기 내 재정의 코드 문맥의 :
inline std::ostream& operator<< (std::ostream& stream, const Shape& shape) {
std::cout << "Shape centered at point: " << shape.getX() << "," << shape.getY();
return stream;
}
inline std::ostream& operator<< (std::ostream& stream, const Circle& circle) {
std::cout << "Circle is at: " << circle.getX() << "," << circle.getY() <<
" and has a radius of: " << circle.getR();
return stream;
}
모두 - 서클 변수가 포인터 또는 기타 형식으로 벡터에 저장되어있는 동안 내 서클 변수에 제대로 액세스 할 수 있기를 원합니다.
합니까'Shape'이 적어도'가상 ~ 모양() {}'소멸자? – user0042
http://idownvotedbecau.se/nomcve/ – user0042
실제로 서클은 그렇게합니다. –