class TestPtr : protected QSharedPointer<Test>
其中Test
是一个抽象接口类。
TestPtr
类应该作为智能指针类。
这是否意味着类TestPtr
派生自类Test
?类测试是否包含在智能指针中?
我读到QSharedPointer
是一个模板类。有人可以澄清一下吗?
答案 0 :(得分:3)
TestPtr
派生自模板类QSharedPointer
的特定版本,该版本已使用类Test
作为模板参数进行实例化。
答案 1 :(得分:3)
这并不意味着
TestPtr
来自Test
- 它不是。class Test
包含在智能指针中(但是关闭:这意味着 TestPtr
的实例实际上是Test
的智能指针而不让它世界知道它,除了TestPtr
的作者明确选择)含义
这意味着TestPtr
想要实现指向Test
的智能指针的功能(QSharedPointer<Test>
就是这样 - 请注意我完全不知道QSharedPointer
},我只是“阅读名字中的内容”。)
为实现这一目标,TestPtr
的作者计划广泛使用QSharedPointer
内部作品中内置的功能(这就是TestPtr
继承而不是QSharedPointer
的原因成员 - 能够使用protected
的{{1}}成员。
但是,作者计划QSharedPointer
到不等同于TestPtr
,即使该类具有相同的功能(我们不知道原因是什么)这与给定的信息)。这就是继承不是QSharedPointer<TestPtr>
的原因。
答案 2 :(得分:1)
这是否意味着类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.
}
答案 3 :(得分:0)
QSharedPointer是一个模板类,Test就是它的模板。
TestPtr继承自QSharedPointer(不是测试 - 除非QSharedPointer继承自Test - 在问题中没有足够的信息来回答这个问题,但可能会这样做。)
从名称来看,它听起来像QSharedpointer是一个智能指针,但我不熟悉这个类能够回答。
就受保护的继承而言,您可能需要查看以下内容
http://www.parashift.com/c++-faq-lite/private-inheritance.html
答案 4 :(得分:0)
不,类TestPtr不是从类Test派生的。 TestPtr类派生自
class QSharedPointer<Test>
这是真正的QSharedPointer类,用类Test表示。
类QSharedPointer是一个模板类,它表示一次编写但可用于测试或其他类的类。
例如,类似于QSharedPointer类,您可以拥有这样的类:
template <class T>
class Vector
{
};
然后你可以拥有这个矢量类的实例来存储不同东西的矢量。例如,Vector<int>
是一个存储整数的类,Vector<bool>
是一个存储布尔值的不同类。