class TestPtr : protected QSharedPointer<Test>
Test
抽象接口类在哪里。该类TestPtr
应用作智能指针类。
这是否意味着类TestPtr
是从类派生的Test
?类测试是否包含在智能指针中?我读到这QSharedPointer
是一个模板类。有人可以澄清一下吗?
class TestPtr : protected QSharedPointer<Test>
Test
抽象接口类在哪里。该类TestPtr
应用作智能指针类。
这是否意味着类TestPtr
是从类派生的Test
?类测试是否包含在智能指针中?我读到这QSharedPointer
是一个模板类。有人可以澄清一下吗?
TestPtr
派生自模板类的特定版本,该模板类QSharedPointer
已使用该类Test
作为其模板参数进行实例化。
不代表什么
TestPtr
源于Test
——它不是。class Test
包含在一个智能指针中(但关闭:这意味着实例 TestPtr
实际上将是智能指针,除非作者明确选择,Test
否则不会让世界知道它)TestPtr
这是什么意思
这意味着TestPtr
想要实现智能指针的功能Test
(这是什么QSharedPointer<Test>
——请注意,我不知道具体是做什么QSharedPointer
的,我只是“阅读名称中的内容”)。
为了实现这一点,作者TestPtr
计划广泛使用内置于内部作品的功能QSharedPointer
(这就是为什么TestPtr
继承而不是拥有QSharedPointer
成员——以便能够使用 的protected
成员QSharedPointer
)。
然而,作者计划TestPtr
不等同于 a即使该类具有大致相同的功能(我们不知道给定信息的原因)。QSharedPointer<TestPtr>
这就是为什么没有继承public
。
这是否意味着类 TestPtr 派生自类 Test ?
编号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
只能在 a TestPtr
byTestPtr
及其后代中访问的方法。假设TestPtr
没有覆盖operator *
并且有一个构造函数接受 a Test
(或对 a 的引用Test
)。然后由于访问限制,以下操作将失败:
int main() {
Test bar;
TestPtr pbar(bar);
*pbar; // Error: QSharedPointer<Test>::operator *() is protected within this context.
}
QSharedPointer 是一个模板类,Test 就是它的模板。
TestPtr 继承自 QSharedPointer (不是 Test - 除非 QSharedPointer 继承自 Test - 问题中没有足够的信息来回答这个问题,但它可能)。
从名字上看,QSharedpointer 是一个智能指针,但我对这个类不熟悉,无法回答。
在受保护的继承方面,您可能需要查看以下内容
http://www.parashift.com/c++-faq-lite/private-inheritance.html
不,TestPtr 类不是从 Test 类派生的。类 TestPtr 确实派生自
class QSharedPointer<Test>
这实际上是类 QSharedPointer,用类 Test 表示。
QSharedPointer 类是一个模板类,这意味着一个类被编写一次,然后可以用于Test 或其他类。
例如,类似于 QSharedPointer 类,你可以有一个这样的类:
template <class T>
class Vector
{
};
然后,您可以拥有此向量类的实例,该类存储不同事物的向量。例如Vector<int>
,一个存储整数Vector<bool>
的类,另一个存储布尔值的类。