有时会有这样的需求,需要拷贝一个对象时,不知道对象的确切类型,只知道他的父类类型。
如果只希望获得未知对象对父类方法的实现,可以在构造对象的时候把对象的指针传给父类对象。
应用在一些动态、泛型的场合,比如动态加载了一个DLL,里面子类的类型是不知道的,但是知道他实现了父类的方法,就可以调用它。
代码:
#include <iostream>
class BaseFoo {
public:
BaseFoo* childfoo = nullptr;
void setChild(BaseFoo* foo) {
//获得了子类实现的 invoke 方法,但子类其他的数据在黑箱中
childfoo = foo;
}
virtual int invoke() {
childfoo->invoke();
return 0;
}
};
class foo:public BaseFoo {
public:
foo() {
setChild(this);
}
int invoke() {
std::cout << "I am the foo\n";
return 0;
}
};
class fooo :public BaseFoo {
public:
fooo() {
setChild(this);
}
int invoke() {
std::cout << "I am the foooooooooooo\n";
return 0;
}
};
int main()
{
foo f;
BaseFoo*f2 = new BaseFoo(f);
f2->invoke();
fooo fo;
BaseFoo* fo2 = new BaseFoo(fo);
fo2->invoke();
std::cout << "Hello World!\n";
}