0

可能重复:
从基类构造函数调用派生类的虚函数?

我有以下文件(请原谅拼写错误,我从内存中快速重写代码)

BaseReader(){
    openFile();
}

void BaseReader::openFile(){
    //logic to open file
}

打开的文件在 .h 中被声明为虚拟公共方法(它受到保护,但我在试图找出问题所在时将其切换为公共方法)。SortReader 定义为:

class SortReader: public BaseReader{
    public:
            SortReader();
            void openFile();
    };

使用以下代码:

SortReader::SortReader(): BaseReader(){}

SortReader::openFile(){
    sortFile();
    BaseReader::openFile();
}

当我尝试构造一个 SortReader 对象时,永远不会调用 sortFile 方法。我可以在调试器中遍历它并观察 SortReader 调用 BaseReader 构造函数 BaseReader 构造函数调用 openFile,后者调用 openFile 的 BaseReader 版本。我希望它调用 SortReader 的打开文件的实现。我需要做什么才能发生这种情况?

4

1 回答 1

2

你不能。在构造函数完成之前,对象还没有完全构造。一般来说,virtual从构造函数调用方法是个坏主意。

您可以将逻辑委托给单独的非virtual方法:

SortReader::openFile(){
    sortFileInternal();     //not virtual
                            //defined in SortReader
    BaseReader::openFile();
}

SortReader::sortFile()      //the virtual method
{
    sortFileInternal();
}
于 2012-07-03T17:22:40.043 回答