繁体   English   中英

请解释这个表达

[英]Please explain this expression

class TestPtr : protected QSharedPointer<Test>

其中Test是一个抽象接口类。 TestPtr类应用作智能指针类。

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

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

没什么意思

  1. TestPtrTest派生的-它不是。
  2. class Test包含在一个智能指针中(但是很接近:这意味着TestPtr 实例实际上将是对Test智能指针,除非TestPtr的作者明确选择这样做,否则不会让全世界知道它)

这是什么意思

这意味着TestPtr想要实现指向Test的智能指针的功能(这就是QSharedPointer<Test>功能-请注意,我不知道QSharedPointer到底是做什么的,我只是“读名字”)。

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

但是,即使该类具有大致相同的功能,作者也计划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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM