我的基本理解是没有纯虚函数的实现,但是,有人告诉我可能有纯虚函数的实现。
class A {
public:
virtual void f() = 0;
};
void A::f() {
cout<<"Test"<<endl;
}
上面的代码可以吗?
使其成为具有实现的纯虚函数的目的是什么?
原文由 skydoor 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果我问你什么是动物的声音,正确的回答是问哪个动物,这正是纯虚函数的目的,或者抽象函数是当你无法在基类(Animal)中为你的函数提供实现但每只动物都有自己的声音。
class Animal
{
public:
virtual void sound() = 0;
}
class Dog : public Animal
{
public:
void sound()
{
std::cout << "Meo Meo";
}
}
原文由 Mohamed El hadjaoui 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
纯
virtual
函数必须在将被直接实例化的派生类型中实现,但是基类型仍然可以定义实现。派生类可以通过使用全范围名称(在您的示例中调用A::f()
如果A::f()
是public
或protected
)。就像是:我能想到的用例是当存在或多或少合理的默认行为时,但类设计者希望仅显式调用这种默认行为。也可能是您希望派生类始终执行自己的工作但也能够调用一组通用功能的情况。
请注意,即使语言允许它,它也不是我认为常用的东西(而且它可以完成的事实似乎让大多数 C++ 程序员,甚至是有经验的程序员都感到惊讶)。