0

我是设计模式的新手,我正在尝试(Head First Design Patterns)的第一个示例,但我正在尝试用 C++ 对其进行编码。我无法编译我的代码!我不知道为什么。这是我的代码。

#include <iostream>
using namespace std;

class QuackBehavior
{
public:
    virtual void quack();
    virtual ~QuackBehavior();
};
class Quack : public QuackBehavior
{
public:
    void quack()
    {
        cout<<"Quacking"<<endl;
    }
};

class MuteQuack : public QuackBehavior
{
public:
    void quack()
    {
        cout<<"<<< Silence >>>"<<endl;
    }
};

class Squeak : public QuackBehavior
{
public:
    void quack()
    {
        cout<<"Squeak"<<endl;
    }
};

class FlyBehavior
{
public:
    virtual void fly();
    virtual ~FlyBehavior();
};

class FlyWithWings : public FlyBehavior
{
public:
    void fly()
    {
        cout<<"I'm flying"<<endl;
    }
};



class FlyNoWay : public FlyBehavior
{
public:
    void fly()
    {
        cout<<"I can't fly"<<endl;
    }
};

class Duck
{
public:
    FlyBehavior *flyBehavior;
    QuackBehavior *quackBehavior;

    void display();
    void performFly()
    {
        flyBehavior->fly();
    }
    void performQuack()
    {
        quackBehavior->quack();
    }

};

class MallardDuck : public Duck
{
public:
    MallardDuck()
    {
        quackBehavior = new Quack();
        flyBehavior = new FlyWithWings();
    }
};



int main()
{

    Duck *mallard = new MallardDuck;

    cout<<"Test"<<endl;

    mallard->performFly();
//  mallard->performQuack();

    return 0;
}

谢谢你的帮助。

4

1 回答 1

1

您会收到编译错误,因为您没有为 QuackBehavior 类和 FlyBehavior 类中的函数提供默认定义。您可以提供默认实现或使函数纯虚拟。

进行以下两项更改,您的代码应该可以正常编译。

class QuackBehavior
{
      public:
          virtual void quack(){}
          virtual ~QuackBehavior(){}
};

class FlyBehavior
{
  public:
      virtual void fly(){}
      virtual ~FlyBehavior(){}
};

或者

class FlyBehavior
{
  public:
      virtual void fly() = 0;
};

class QuackBehavior
{
  public:
      virtual void quack() = 0;
};
于 2013-03-20T14:15:54.090 回答