首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ OOP的多态有关问题

2012-12-31 
C++ OOP的多态问题virtual class IAnimal {protected:int Order 0public:int getOrder(){return Order

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

热点排行