[英]C++: Avoiding repetition by calling pure virtual function
對於以下代碼,
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() 的上下文是相同的),或者我們不能僅僅因為我們不能在構造函數中調用純虛函數而避免它?
您可以將函數h()
為A
的成員。
只有在A::A()
(或其他A
構造函數或A::~A()
)的主體期間執行h()
時,純虛函數調用才會成為問題。 在B::B()
或C::C()
的主體內部, *this
的多態類型分別是B
或C
,因此您在類B
或C
聲明的虛擬覆蓋將起作用。
當然,添加一個僅實現該功能並從 A 繼承的中間類 D。然后 B 和 C 可以從 D 繼承。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.