1
class TestPtr : protected QSharedPointer<Test>

Test抽象接口类在哪里。该类TestPtr应用作智能指针类。

这是否意味着类TestPtr是从类派生的Test?类测试是否包含在智能指针中?我读到这QSharedPointer是一个模板类。有人可以澄清一下吗?

4

5 回答 5

3

TestPtr派生自模板类的特定版本,该模板类QSharedPointer已使用该类Test作为其模板参数进行实例化。

于 2011-03-18T20:30:12.570 回答
3

不代表什么

  1. TestPtr源于Test——它不是。
  2. class Test包含在一个智能指针中(但关闭:这意味着实例 TestPtr实际上将是智能指针,除非作者明确选择,Test否则不会让世界知道它)TestPtr

这是什么意思

这意味着TestPtr想要实现智能指针的功能Test(这是什么QSharedPointer<Test>——请注意,我不知道具体是做什么QSharedPointer的,我只是“阅读名称中的内容”)。

为了实现这一点,作者TestPtr计划广泛使用内置于内部作品的功能QSharedPointer(这就是为什么TestPtr继承而不是拥有QSharedPointer成员——以便能够使用 的protected成员QSharedPointer)。

然而,作者计划TestPtr不等同于 a即使该类具有大致相同的功能(我们不知道给定信息的原因)QSharedPointer<TestPtr>这就是为什么没有继承public

于 2011-03-18T20:32:02.407 回答
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只能在 a TestPtrbyTestPtr及其后代中访问的方法。假设TestPtr没有覆盖operator *并且有一个构造函数接受 a Test(或对 a 的引用Test)。然后由于访问限制,以下操作将失败:

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

    *pbar; // Error: QSharedPointer<Test>::operator *() is protected within this context.
}
于 2011-03-18T20:38:18.930 回答
0

QSharedPointer 是一个模板类,Test 就是它的模板。

TestPtr 继承自 QSharedPointer (不是 Test - 除非 QSharedPointer 继承自 Test - 问题中没有足够的信息来回答这个问题,但它可能)。

从名字上看,QSharedpointer 是一个智能指针,但我对这个类不熟悉,无法回答。

在受保护的继承方面,您可能需要查看以下内容

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

于 2011-03-18T20:30:26.170 回答
0

不,TestPtr 类不是从 Test 类派生的。类 TestPtr 确实派生自

class QSharedPointer<Test>

这实际上是类 QSharedPointer,用类 Test 表示。

QSharedPointer 类是一个模板类,这意味着一个类被编写一次,然后可以用于Test 或其他类。

例如,类似于 QSharedPointer 类,你可以有一个这样的类:

template <class T>
  class Vector
    {
    };

然后,您可以拥有此向量类的实例,该类存储不同事物的向量。例如Vector<int>,一个存储整数Vector<bool>的类,另一个存储布尔值的类。

于 2011-03-18T20:31:15.343 回答