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我試圖實現訪問者模式。訪問者已經重載了它需要訪問的不同類型訪問的定義。 –