【发布时间】:2015-01-07 15:02:07
【问题描述】:
假设有一个抽象类A和两个类B和C分别派生自A和B
class A
{
virtual void print() = 0;
};
class B : public A
{
void print();
};
//print() must be implemented
void B::print()
{
std::cout << "Hello" << std::endl;
}
class C : public B
{
//print() does not require to be implemented
};
我了解到,从C 的直接父级B 的角度来看,print() 不是纯虚方法,但从C 的祖父级A 的角度来看,print() 是纯虚方法。那么,它不应该也需要在C 中实现吗?
【问题讨论】:
-
为什么
C应该关心B如何提供它所有的好处?并且纯虚函数不需要在派生类中实现。它们只需要在某个地方实现,派生类就没有纯虚函数,因此是不可实例化的。 -
C 从 B 继承了它的实现,所以它不必提供一个。但是,B 没有从 A 那里得到一个,因为它是纯虚拟的。
-
不知道你说的这两个“观点”是什么意思。该函数有一个非纯覆盖,所以一切都很好。只要覆盖存在,该覆盖在层次结构中的确切位置并不重要。
-
@Borgleader:
B可以从A得到一个,即使A标记了纯虚拟函数。这在 dtor 中最为常见…… -
@Deduplicator 我指的是这个具体案例。在这种情况下,它不会。
标签: c++ class derived-class pure-virtual