gpt4 book ai didi

c++ - 继承和虚函数无法编译(来自 Head First DP)

转载 作者:行者123 更新时间:2023-11-28 07:42:25 24 4
gpt4 key购买 nike

我是设计模式的新手,我正在尝试 (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;
}

感谢您的帮助。

最佳答案

你得到一个编译错误,因为你没有为类 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;
};

关于c++ - 继承和虚函数无法编译(来自 Head First DP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15525270/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com