一個類A使用另一個類B的private/protected函數f(),常見的方法有幾種:
1) 複製B的f()的內容到A中。
最常見的也是代碼複用最低的方法。
2) 令B爲A的成員變量(或在A的某函數中生成B),然後調用B的f()。
這時要提升f()的訪問權限爲public,訪問權限有時卻是改不了的。
如果B爲A的成員變量,則A變爲有狀態的類,在一些情況下是不行的(如A爲多線程下單例)
3) A私有繼承B。
若A已經繼承自某個類(一般情況下會這樣),則可能會出現菱形繼承的問題,需要用虛擬繼承來解決,但是可能無法改成虛擬繼承。
4) 提煉f(),新建一個基類C,讓A和B都集成自C。
感覺是比較學術的方法,對於複雜的類來說可能會很麻煩。