2011-03-18 90 views
1
class TestPtr : protected QSharedPointer<Test> 

其中Test是一個抽象接口類。 TestPtr類應該作爲智能指針類。請解釋此表達式

這是表示類TestPtr是從類Test派生?類測試是否包含在智能指針中? 我讀過QSharedPointer是模板類。有人可以澄清嗎?

+1

*「我讀了QSharedpointer是一個模板類。」 * - 那,呃,是[回答您的問題(HTTP:// WWW。 cplusplus.com/doc/tutorial/templates/)。 – 2011-03-18 20:24:36

+0

這意味着TestPtr是以受保護的方式從QSharedPointer 派生的,那有什麼問題?你知道模板類是什麼意思嗎? – 2011-03-18 20:30:55

回答

3

什麼,這並不意味着

  1. TestPtrTest派生 - 事實並非如此。
  2. class Test被封閉在一個智能指針(但接近:它意味着TestPtr情況下,實際上是智能指針,以Test而不讓世界瞭解它除了作爲TestPtr筆者明確選擇)

這意味着什麼

這意味着TestPtr希望實現一個智能指針的功能Test(這是什麼QSharedPointer<Test>是 - 請注意我不知道QSharedPointer究竟是什麼,我只是「讀名字裏面的東西」)。

爲了實現這一點,TestPtr計劃廣泛使用內置的QSharedPointer內作品的功能作者(這就是爲什麼TestPtr繼承而不是有QSharedPointer成員 - 以能夠使用的QSharedPointerprotected成員)。

然而,TestPtr筆者的計劃不相當於一個QSharedPointer<TestPtr>即使類具有大致相同的功能(我們不知道用給定的信息這樣做的原因)。這就是爲什麼繼承不是public

3

TestPtr從模板類別QSharedPointer的特定版本派生,該類別已經以類別Test作爲其模板參數實例化。

0

QSharedPointer是一個模板類,Test是它的模板。

TestPtr從QSharedPointer繼承(不是測試 - 除非QSharedPointer繼承自Test--沒有足夠的信息來回答這個問題,但它可能)。

從名字看來,QSharedpointer是一個聰明的指針,但我不熟悉這個類能夠回答。

在保護傳承方面,你可能想看看下面的

http://www.parashift.com/c++-faq-lite/private-inheritance.html

0

沒有,類TestPtr不是從Test類的。類TestPtr並獲得來自

class QSharedPointer<Test>

這是真的類QSharedPointer,在課堂測試表示。

QSharedPointer類是一個模板類,它意味着一次寫入但可以用於Test或其他類的類。

例如,類似於類QSharedPointer,你可以有這樣一類:

template <class T> 
    class Vector 
    { 
    }; 

然後,您可以有存儲不同的東西載體中,這種載體類的實例。例如Vector<int>是存儲整數的一個類,並且Vector<bool>是存儲布爾值的不同類。

1

這是否意味着類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的成員只能在TestPtrTestPtr及其後代進行訪問。假設TestPtr不會覆蓋operator *並具有一個構造函數,其構造函數採用Test(或引用Test)。那麼下面會失敗,因爲訪問限制:

int main() { 
    Test bar; 
    TestPtr pbar(bar); 

    *pbar; // Error: QSharedPointer<Test>::operator *() is protected within this context. 
}