读书人

Xerces C++抽象类有关问题

发布时间: 2012-03-26 15:46:56 作者: rapoo

Xerces C++抽象类问题
你好!
我是C++新手,请教一个问题。

在Xerces C代码中,有一些抽象类问题不是很明白。
比如类DOMNode,其中有纯虚函数。该类没有父类,子类不知道有没有。

然后在项目中,直接使用
DOMNode* xmlNode = NULL;

xmlNode->getNodeValue();其中getNodeValue是DOMNode的纯虚函数。

这样运行没有错误。

这样是不是算抽象类实例化呢?

[解决办法]
这样运行不会出错?
运行的时候应该会报错吧
[解决办法]
应该有子类继承 实体化对象吧
[解决办法]
DOMNode* xmlNode = NULL;

xmlNode->getNodeValue();

这里xmlNode是一个NULL值,调用一个NULL值的方法一般是会有错误的。

编译会通过,但是运行时会出错。你检查一下程序是否运行了此句。
[解决办法]
纯虚函数是这样用的么?
不知道这要实现一个什么样的功能。
我记得虚函数一般用于继承派生用的。
虚函数一般是基类不实现,而在派生类中实现这个函数的功能。
估计要看具体什么功能,还要到派生类中去看
[解决办法]
这个和你说的完全不同了。只要使用前赋予了正确的值就没问题了。不可能直接赋值NULL后就调用纯虚函数的。
[解决办法]
你应该是不明白多态吧?

DOMNode* xmlNode = NULL;

if(NULL == (xmlNode = nodeOption->getAttributes()->getNamedItem(Char2XmlCh("name").get())))
{
continue;
}

此处getNamedItem()方法会返回一个变量,而这个变量类型是继承于DOMNode类的,xmlNode此时指向的是这个变量,调用的也是这个变量的方法。如果还不大明白,你可以去看看多态
[解决办法]

探讨
不是纯虚函数需要子类实现
然后子类实例化。
这个实例化的子类然后调用这个函数吗?

可以直接调用自己的纯虚函数吗?

[解决办法]
xmlNode = nodeOption->getAttributes()->getNamedItem(Char2XmlCh("name")

nodeOption是个节点,此时它是一个变量,也就是一个实例了,->getAttributes()得到属性节点列表,得到的属性节点列表也是一个实例变量是吧?然后再调用属性列表的getNamedItem查询得到名为"name"的节点.然后将此节点赋值给xmlNode

读书人网 >C++

热点推荐