0
这是示例代码我有:函数,它在C语言的基类指针++一个重载用一个指向子类
#include <iostream>
#include <vector>
#include <string>
class Animal {
};
class Rabbit : public Animal {
};
class Caller {
public:
virtual void call(Animal* a) {
std::cout << "Caller calls animal" << std::endl;
}
virtual void call(Rabbit* r) {
std::cout << "Caller calls rabbit" << std::endl;
}
};
int main(int argc, char** argv) {
std::vector<Animal*> v;
Caller c;
auto a = new Animal();
auto r = new Rabbit();
v.push_back(a);
v.push_back(r);
for(auto elem : v) {
c.call(elem);
}
return 0;
}
此代码的输出可以在这里找到
它输出:
Caller calls animal
Caller calls animal
我想知道,withou t铸造一个具体的元素Rabbit*
,有没有办法让call(Rabbit *r)
方法得到调用?
不,但您为什么需要为派生类型调用不同的方法?这打破了多态的目的。 – juanchopanza
无关,但您的程序正在泄漏内存。这个例子你不需要'new',只需要使用'Animal a;'和'v.push_back(&a)'。 –
@juanchopanza我试图实现访问者模式。访问者已经重载了它需要访问的不同类型访问的定义。 –