首页 > 解决方案 > 有什么区别:派生类构造函数是否通过使用取消引用调用抽象类构造函数进行初始化?

问题描述

我有一个抽象(模板)类tXmlNode,我从中派生了模板类tXmlGeometry。该派生类应使用指向不同类型对象的指针构造,因此它被创建为模板。该对象应通过指针传递给派生类。

我当前对派生类的构造函数的实现如下(我省略了范围实现,因为它与我认为的问题无关):

nXml::tXmlGeometry<Part>::tXmlGeometry(Part* part) : tXmlNode<Part>(part)

我的编译器(MS VisualStudio 2019)接受这个。但它也承认:

nXml::tXmlGeometry<Part>::tXmlGeometry(Part* part) : tXmlNode<Part>(*part)

这里的确切区别是什么?据我了解,第二个调用抽象类的构造函数并将其内容传输part到该tXmlNode构造函数,而第一个做什么?

现在我正在创建一个tXmlSegment继承自tXmlGeometry.

这个新抽象类的构造函数公式如下:

nXml::tXmlSegment2D::tXmlSegment2D(tXmlGeometry<Part>* geo, const int npos) : tXmlGeometry<Part>(*geo), position(npos)

奇怪的是,我的编译器现在坚持要获取取消引用的geo对象,我不明白这样做的原因。为什么我必须取消引用它?

编辑: tXmlNode 的构造函数如下:

template<class Node>
    inline tXmlNode<Node>::tXmlNode(
        Node* node,
        const int npos) : xml_doc(nullptr), node(node), n_childs(0), n_attr(0), position(npos)

标签: c++constructor

解决方案


推荐阅读