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