C++ OOP的多态问题
virtual class IAnimal {
protected:
int Order = 0;
public:
int getOrder()
{
return Order;
}
void setOrder(int val)
{
Order = val;
}
};
class Dog : IAnimal {
public:
};
class Cat : IAnimal {
public:
};
我定义了一个简单的猫狗类 动物类使他们父类
现在我想实现 这个添加方法
class AnimalQueue {
private:
DoublyLinkedList<Dog> *Dogs;
DoublyLinkedList<Cat> *Cats;
public:
AnimalQueue()
{
Dogs = new DoublyLinkedList<Dog>();
Cats = new DoublyLinkedList<Cat>();
}
void enqueue(IAnimal *ani)
{
if (typeid(ani) == typeid(Dog)) { //这里貌似也可以使用dynamic_Cast也不会写 java有个instanceof就好多了
Dogs->addToHead(ani); //这里会出现错误不知道怎么写。。。 JAVA直接就可以添加啊
}else
{
Cats->addToHead(ani);//同上
}
}
};
[解决办法]
c++ 不是这样写的,给你个简单的例子
#include <vector>
class IAnimal
{
protected:
int Order = 0;
public:
virtual int getOrder()
{
return Order;
}
virtual void setOrder(int val)
{
Order = val;
}
};
class Dog : IAnimal
{
public:
};
class Cat : IAnimal
{
public:
};
class AnimalQueue
{
private:
std::vector<Dog*> Dogs;
std::vector<Cat*> Cats;
public:
void enqueue (Dog *ani)
{
Dogs.push_back(ani);
}
void enqueue (Cat *ani)
{
Cats.push_back(ani);
}
};
或者
class AnimalQueue
{
private:
std::vector<IAnimal*> animals;
public:
void enqueue (IAnimal*animal)
{
animals.push_back(animal);
}
};
Dog/Cat 里面重载虚函数实现接口。