這是一個面試問題。我不是一個C++專家還,所以我需要在尋找這個問題的答案一定的幫助(我首先要明白這個問題...是一個有效的問題?)C++:有選擇地限制對超類的方法的訪問?
問:
假設我有一個B類從A類派生 ,我想重用 一些,但不是所有的A. 的方法,我將如何限制訪問 父類的方法選擇?
謝謝!
這是一個面試問題。我不是一個C++專家還,所以我需要在尋找這個問題的答案一定的幫助(我首先要明白這個問題...是一個有效的問題?)C++:有選擇地限制對超類的方法的訪問?
問:
假設我有一個B類從A類派生 ,我想重用 一些,但不是所有的A. 的方法,我將如何限制訪問 父類的方法選擇?
謝謝!
我認爲
A
方法應該是從B
對象訪問的的A
using
指令可以解決您的問題。例如:
class A
{
public: // or protected for that matter
void foo();
void bar();
};
class B : private A // or protected, depending on whether
// you want subclasses of B to expose
// some methods from A themselves
{
public:
using A::foo;
};
使得從B
類foo
可用的,但不是bar
。但作爲警告,請注意using A::foo
將暴露foo
的所有超載。
這是一個很好的解決方案,履行給出的問題。但是,應該指出,B類與繼承層次是完全分開的,所以不可能做類似「B objB; A * ptrA = &objB;」的事情。對於這個問題,AFAIK並沒有完全令人滿意的解決方案。 – Baltasarq 2011-03-09 12:16:06
@Baltasarq:如果你可以通過一個指向'A'的裸指針來訪問它們,那麼限制'A'的方法又有什麼意義呢?回想一下,私有繼承是**而不是**是「關係」。它只與「正常」公共繼承有關,應該被視爲合成設備。 – 2011-03-09 12:17:34
你能解釋一下嗎?「但作爲一個警告,請注意使用A :: foo將暴露foo的所有重載」? – maxpayne 2011-03-09 12:24:41
您可能是指您*想重用** A ***的某些方法。 – 2011-03-09 12:12:13
是的..我做了更正..謝謝.. – maxpayne 2011-03-09 12:18:47