c++ - 虚类成员函数的多态/继承问题

标签 c++ class function inheritance polymorphism

我可能对多态性与继承性究竟是什么有错误的想法,但基本上我想做的是让 classB 派生自 classA,并创建一个 classB 来覆盖 classA,像这样:


A 类:

  /////////////////
 // CodeBlock.h //
/////////////////

typedef enum {
    CCBT_UNDEFINED,
    CCBT_FUNCTION,
    //...
} CODE_BLOCK_TYPE;

class CCodeBlock {
public:
    CCodeBlock::CCodeBlock();
    CCodeBlock::CCodeBlock(CString& source, DWORD startPos);
    CCodeBlock::~CCodeBlock();
    virtual CODE_BLOCK_TYPE CCodeBlock::GetType() = 0

    CString m_code;
    DWORD m_startPos;
    DWORD m_length;
    int m_numLines;
}

  ///////////////////
 // CodeBlock.cpp //
///////////////////

//...
CCodeBlock::CCodeBlock(CString& source, DWORD startPos) : m_code(source), m_startPos(startPos) {
    m_length = m_code.GetLength();
}

CODE_BLOCK_TYPE CCodeBlock::GetType() {
    return CCBT_UNDEFINED;
}


B 类:

  /////////////////////
 // FunctionBlock.h //
/////////////////////

#include "CodeBlock.h"

class CFunctionBlock : public CCodeBlock {
public:
    CFunctionBlock::CFunctionBlock();
    CFunctionBlock::CFunctionBlock(CString& source, DWORD startPos);
    CFunctionBlock::~CFunctionBlock();
    CODE_BLOCK_TYPE CFunctionBlock::GetType();
}

  ///////////////////////
 // FunctionBlock.cpp //
///////////////////////

//...
CFunctionBlock::CFunctionBlock(CString& source, DWORD startPos)
{
    m_code = source;
    m_startPos = startPos;
}

CFunctionBlock::~CFunctionBlock()
{
    CCodeBlock::~CCodeBlock();
}

CODE_BLOCK_TYPE CFunctionBlock::GetType()
{
    //////////////////////////////
    // >> NEVER GETS CALLED! << //
    //////////////////////////////
    return CCBT_FUNCTION;
}


主要:

CCodeBlock *block = new CFunctionBlock(L"function hello(){ print('hello') }", iPos)
CODE_BLOCK_TYPE type = block->GetType(); // ALWAYS RETURNS CCBT_UNDEFINED!


如您所见,GetType() 始终返回 CCBT_UNDEFINED。请记住,CCodeBlock 是 CFunctionBlock 的“通用”版本(以及其他一些志同道合的类,其中一些包含 CCodeBlock“m_parent”成员变量),并且应该继承任何 CCodeBlock 成员变量& 成员函数,以及覆盖 CCodeBlock 中包含的特定函数列表。

如何实现?我是否需要求助于使用模板(如果可能的话)?

最佳答案

将评论作为答案:

当你在 CCodeBlock 类中声明成员函数时,你不需要 CCodeBlock::

关于c++ - 虚类成员函数的多态/继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15080797/

相关文章:

c++ - list 正在选择预定义的 redist

c++ - HDF5:将线性数组保存到三维数据集

java - Setter 方法有异常

javascript - 如何在每次调用函数时检查 if/else 语句 (JavaScript)?

python - * : 'Nonetype' and 'Float' with array problem [duplicate]的不受支持的操作数类型的Python错误

c++ - 对某些 UNIX 代码有疑问吗?

c++ - 在数组中搜索以及搜索和遍历树

java - java类设计指南

python - 由表达式赋值的类变量

javascript - Onkeydown JS函数添加调用相同函数的输入