class Bird
{
virtual void fly(); //birds can fly
void travel() { fly(); } //birds travel by flying
}
class Eagle: public Bird
{
virtual void fly() {/* implement the flying code here */}
}
class Penguin: public Bird
{
virtual void swim(); //penguins can swim
}
Eagle e();
e.travel(); //OK, eagle can fly
Penguin p();
p.travel(); //Error, penguin can't fly
class Bird
{
public:
virtual void travel()= 0;
}
class Eagle: public Bird
{
virtual void travel() { fly(); }
void fly() {/* implement the flying code here */}
}
class Penguin: public Bird
{
virtual void travel() { swim(); }
void swim() {}
}
Eagle e();
e.travel(); //OK, eagle can fly
Penguin p();
p.travel(); //Error, penguin can't fly
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!
速戳参与调研>>>https://t.csdnimg.cn/Kf0y
C++里interface就是只有pure virtual functions的abstract class。
下面是改写后的代码。
class Bird
{
public:
virtual void fly(); //birds can fly
virtual void travel()
{
fly();
} //birds travel by flying
}
class Eagle: public Bird
{
public:
virtual void fly()
{
/* implement the flying code here */
}
}
abstract class Swimmable
{
public:
virtual void swim() = 0;
}
class Penguin: public Bird, public Swimmable
{
public:
virtual void swim()
{
// implement penguin swim
}
virtual void fly()
{
// provide trivial implementation for fly(), which does not apply to penguin, to shut up compiler
}
virtual void travel()
{
swim();
}
}
Eagle e();
e.travel(); //OK, eagle can fly
Penguin p();
p.travel(); //Ok, penguin travel by swim