假設我有一個父類A。
class A
{
public:
A() {}
void MyMethod()
{
printf( "A\n" );
}
};
我有一個兒童班B。
class B : public A
{
public:
B() {}
void MyMethod()
{
printf( "B\n" );
}
};
現在,我想要求類B呼叫A::MyMethod(),而不顯式呼叫它,如上所示。導致:
A
B
或者
B
A
那可能嗎?
現在B->MyMethod()只呼叫子方法。
uj5u.com熱心網友回復:
非虛擬介面習慣用法讓基類定義一個公共非虛擬成員函式,以及一個私有虛擬成員函式,它是派生類的覆寫點。
公共非虛擬成員函式充當面向公眾的 API。
私有虛擬成員函式充當面向 API 的類層次結構。
分離這兩個關注點可能是一種方便的技術,尤其是對于大型專案、除錯目的以及確保基類的公共非虛擬成員函式中的前后操作。
#include <iostream>
using std::cout;
namespace {
class A {
virtual void MyMethodImpl() const {
// Derived classes should override this virtual member function
// and add their extra steps there.
}
public:
virtual ~A() = default;
A() {}
void MyMethod() const {
cout << "A::MyMethod before steps.\n";
MyMethodImpl();
cout << "A::MyMethod after steps.\n";
}
};
class B : public A {
void MyMethodImpl() const override {
cout << "B::MyMethodImpl extra steps.\n";
}
public:
B() {}
};
} // anon
int main() {
B b;
b.MyMethod();
}
uj5u.com熱心網友回復:
在 C 中,除了要求派生類中的建構式和解構式必須以特定方式呼叫父類的方法外,沒有辦法要求一個類方法呼叫另一個類方法。
除此之外,在 C 中沒有辦法直接要求它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/424208.html
上一篇:在元類中傳遞父屬性
下一篇:繼承的框架-缺少屬性
