没有定义的纯虚函数也能使用??

brbzhang 2008-04-09 10:24:39

//今天看到的一段代码很奇怪,一个抽象类没有任何派生类,其中的纯虚函数自然没有实际定义。但是下面却能直接使用,这让我百思不得其解。
//贴出代码请高手解惑
//抽象类DTDVerifier,DTD是(document type definition)文件类型定义的意思
class DTDVerifier
{
public:
virtual bool IsValidSubtag(char* tagName, char* subTagName) = 0;
virtual bool IsValidAttributeName(char* tagName, char* attrName) = 0;
virtual bool IsValidAttributeValue(char* tagName, char* attrName, char* attrValue) = 0;
virtual char* GetRequiredAttribute(char* tagName, int index) = 0;
virtual bool CanHaveValue(char* tagName) = 0;
};
//下面的类与类DTDVerifier没有继承关系
class XMLTag
{
public:
XMLTag();
XMLTag(char* tagName);
~XMLTag();
//这个函数中用到了类DTDVerifier
bool ParseTag(StringParser* parser, DTDVerifier* verifier, char* errorBuffer = NULL, int errorBufferSize = 0)
private:
char* fTag;
char* fValue;
OSQueue fAttributes;//链表类
OSQueue fEmbeddedTags;
OSQueueElem fElem;//链表节点类
};
bool XMLTag::ParseTag(StringParser* parser, DTDVerifier* verifier, char* errorBuffer, int errorBufferSize)
{
。。。。。
//下面是第一次用到DTDVerifier的函数IsValidAttributeName,但很明显这之前都没有实际定义吗??怎么直接就拿来用了呢??
//总不会因为函数名就知道它是干什么的了吧,c++还没这么高级吧!
if (verifier && !verifier->IsValidAttributeName(fTag, attr->fAttrName))
{
if (errorBuffer != NULL)
qtss_sprintf(errorBuffer, "Attribute %s not allowed in tag %s on line %d", attr->fAttrName, fTag, parser->GetCurrentLineNumber());
return false; // bad attribute specification
}

}
...全文
128 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
brbzhang 2008-04-09
  • 打赏
  • 举报
回复
领教了
多谢指导
  • 打赏
  • 举报
回复
多态 针对接口编程,而不是类

建议看看C++Primer中多态.
totaljuven 2008-04-09
  • 打赏
  • 举报
回复
不懂

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧