在以下程序中,如果GetPart()被保護而不是私有,那麼這些類中的外部(派生)類或其他成員函數是否會有區別?即是否存在一個編譯錯誤,可能是由於將該函數設置爲私有的而導致的,如果該函數在基類中受到保護,則該編譯錯誤將不存在?重寫一個私有函數,它與protected有什麼不同?
我發現最近可能會覆蓋私人虛擬功能,這讓我很吃驚。在語義上,這對我來說似乎是受保護的工作,而不是私有的。
#include <iostream>
class A {
public:
A() {}
virtual ~A() {}
virtual void runFn() { GetPart(); }
private:
virtual void GetPart() = 0;
};
class B : public A {
public:
B() {}
virtual ~B() {}
private:
virtual void GetPart() override { std::cout << "GETPART RUN" << std::endl; }
};
int main()
{
B b;
b.runFn();
return 0;
}
見http://ideone.com/S9681V表明該行確實得到來看,隨着功能得到妥善覆蓋。
覆蓋私人虛擬功能有時是「[功能](https://isocpp.org/wiki/faq/strange-inheritance#private-virtuals)」。 – user1810087
注意:你也可以重載/隱藏私人功能,你不能調用隱藏的功能。 – user1810087