读书人

C++ OOP的多态有关问题

发布时间: 2012-12-31 11:57:52 作者: rapoo

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 里面重载虚函数实现接口。

读书人网 >C++

热点推荐