对于以下代码,
class A
{
private:
virtual void f() = 0;
virtual void g() = 0;
...
public:
A()
{
}
...
}
class B : public A
{
private:
void f()
{
...
}
void g()
{
...
}
void h()
{
if (...)
{
f();
}
else
{
g();
}
}
...
public:
B()
{
h();
}
...
}
class C : public A
{
private:
void f()
{
...
}
void g()
{
f();
}
void h()
{
if (...)
{
f();
}
else
{
g();
}
}
...
public:
C()
{
h();
}
...
}
有没有办法避免重复h()(类B和C中函数h()的上下文是相同的)或者我们无法避免它只是因为我们不能在构造函数中调用纯虚函数?
答案 0 :(得分:2)
您可以将您的函数h()
实现为A
的成员。
如果在h()
(或其他A::A()
构造函数或A
)的主体中执行A::~A()
,纯虚函数调用将只会出现问题。在B::B()
或C::C()
的正文中,*this
的多态类型分别为B
或C
,因此您在类B
中声明的虚拟覆盖}或C
会生效。
答案 1 :(得分:0)
当然,添加一个只实现该功能并继承自A的中间类D.然后B和C可以从D继承。