[英]Please explain this expression
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
成员的原因,以便能够使用QSharedPointer
的protected
成员)。
但是,即使该类具有大致相同的功能,作者也计划TestPtr
不等于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
只在一个访问TestPtr
通过TestPtr
及其后代。 假设TestPtr
没有覆盖operator *
并且具有接受Test
(或对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类的实例,该实例存储不同事物的矢量。 例如, Vector<int>
是存储int的一类,而Vector<bool>
是存储布尔值的另一类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.