사용 다형성, 즉 그들이 거기 내용은 다음과 같습니다
#include <algorithm>
#include <functional>
#include <iostream>
#include <list>
using namespace std;
class A {
public:
virtual void print() {
cout << "This is an A object" << endl;
}
};
class B : public A {
public:
virtual void print() {
cout << "This is a B object" << endl;
}
};
class C : public A {
public:
virtual void print() {
cout << "This is a C object" << endl;
}
};
class D : public B {
// empty
};
int main() {
std::list<A*> objects;
objects.push_back(new A());
objects.push_back(new B());
objects.push_back(new C());
objects.push_back(new D());
for_each(objects.begin(), objects.end(), mem_fun(&A::print));
return 0;
}
// outputs:
// This is an A object
// This is a B object
// This is a C object
// This is a B object
왜 당신이 그들의 기본 유형에 캐스팅해야합니까? 아마 대신 가상 함수를 사용해야합니다. –
기본 클래스에 대한 참조 만있는 동안 상속 된 메서드를 호출 할 수 있다고 생각하지 않았습니다. 기본 메서드를 호출하지 않을까요? 가상 메서드를 호출하려면 상속 된 클래스로 캐스팅해야한다고 생각했습니다. 내가 잘못? –
네가 틀렸어. 기본 메서드가 "가상"이라고 표시되면 상속 된 메서드가 항상 호출됩니다. – Jem