class TestPtr : protected QSharedPointer<Test>
其中Test
是一個抽象接口類。 TestPtr
類應該作爲智能指針類。請解釋此表達式
這是表示類TestPtr
是從類Test
派生?類測試是否包含在智能指針中? 我讀過QSharedPointer
是模板類。有人可以澄清嗎?
class TestPtr : protected QSharedPointer<Test>
其中Test
是一個抽象接口類。 TestPtr
類應該作爲智能指針類。請解釋此表達式
這是表示類TestPtr
是從類Test
派生?類測試是否包含在智能指針中? 我讀過QSharedPointer
是模板類。有人可以澄清嗎?
什麼,這並不意味着
TestPtr
從Test
派生 - 事實並非如此。class Test
被封閉在一個智能指針(但接近:它意味着TestPtr
情況下,實際上是智能指針,以Test
而不讓世界瞭解它除了作爲TestPtr
筆者明確選擇)這意味着什麼
這意味着TestPtr
希望實現一個智能指針的功能Test
(這是什麼QSharedPointer<Test>
是 - 請注意我不知道QSharedPointer
究竟是什麼,我只是「讀名字裏面的東西」)。
爲了實現這一點,TestPtr
計劃廣泛使用內置的QSharedPointer
內作品的功能作者(這就是爲什麼TestPtr
繼承而不是有QSharedPointer
成員 - 以能夠使用的QSharedPointer
的protected
成員)。
然而,TestPtr
到筆者的計劃不相當於一個QSharedPointer<TestPtr>
即使類具有大致相同的功能(我們不知道用給定的信息這樣做的原因)。這就是爲什麼繼承不是public
。
TestPtr
從模板類別QSharedPointer
的特定版本派生,該類別已經以類別Test
作爲其模板參數實例化。
QSharedPointer是一個模板類,Test是它的模板。
TestPtr從QSharedPointer繼承(不是測試 - 除非QSharedPointer繼承自Test--沒有足夠的信息來回答這個問題,但它可能)。
從名字看來,QSharedpointer是一個聰明的指針,但我不熟悉這個類能夠回答。
在保護傳承方面,你可能想看看下面的
http://www.parashift.com/c++-faq-lite/private-inheritance.html
沒有,類TestPtr不是從Test類的。類TestPtr並獲得來自
class QSharedPointer<Test>
這是真的類QSharedPointer,在課堂測試表示。
QSharedPointer類是一個模板類,它意味着一次寫入但可以用於Test或其他類的類。
例如,類似於類QSharedPointer,你可以有這樣一類:
template <class T>
class Vector
{
};
然後,您可以有存儲不同的東西載體中,這種載體類的實例。例如Vector<int>
是存儲整數的一個類,並且Vector<bool>
是存儲布爾值的不同類。
這是否意味着類TestPtr是從類Test派生的?
No. TestPtr
源自QSharedPointer
。
在智能指針中是否包含類測試?
是的。相反,QSharedPointer<Test>
是智能指針類,管理Test
指針。
我讀到QSharedpointer是一個模板類。有人可以澄清嗎?
模板抽象出類似於函數如何將操作抽象出來的類型。例如,
int i,j;
...
i = 2*i+1;
j = 2*j+1;
可以被抽象到:
void foo(int &x) {
x = 2*x + i;
}
...
int i,j,
...
foo(i);
foo(j);
類似地,而不是單獨的類如:
class IntSharedPtr { typedef int value_type; ... };
class FloatSharedPtr { typedef float value_type; ...};
你可以有一個模板類:
template <typename _T>
class SharedPtr { typedef _T value_type; ...};
typedef SharedPtr<int> IntSharedPtr;
typedef SharedPtr<float> FloatSharedPtr;
最後,protected
意味着QSharedPointer
的成員只能在TestPtr
的TestPtr
及其後代進行訪問。假設TestPtr
不會覆蓋operator *
並具有一個構造函數,其構造函數採用Test
(或引用Test
)。那麼下面會失敗,因爲訪問限制:
int main() {
Test bar;
TestPtr pbar(bar);
*pbar; // Error: QSharedPointer<Test>::operator *() is protected within this context.
}
*「我讀了QSharedpointer是一個模板類。」 * - 那,呃,是[回答您的問題(HTTP:// WWW。 cplusplus.com/doc/tutorial/templates/)。 – 2011-03-18 20:24:36
這意味着TestPtr是以受保護的方式從QSharedPointer派生的,那有什麼問題?你知道模板類是什麼意思嗎? –
2011-03-18 20:30:55