我有一个实现 Logger_IF 的 C++ 类 Logger,它定义了一个纯虚函数:
virtual void log( string message ) = 0;
我想用它自己的接口将 Logger 扩展到我自己的类。我已经调用了我的类 SpecialLogger,它扩展了 SpecialLogger_IF。SpecialLogger_IF 本身扩展了 Logger。我已经定义:
virtual void log( string message, string extra ) = 0;
在我的 SpecialLogger_IF 课程上。据我了解,我应该仍然可以通过 SpecialLogger_IF 以及 log("message", "extra") 调用 log("message") 但是我无法让它工作。
#include <iostream>
using namespace std;
class Logger_IF
{
public:
virtual void log( string message ) = 0;
virtual ~Logger_IF() {};
};
class Logger : public Logger_IF
{
public:
void log( string message )
{
this->out( message );
}
protected:
void out( string message )
{
cout << "LOG: " << message << endl;
}
};
class SpecialLogger_IF : public Logger
{
public:
virtual void log( string message, string extra ) = 0;
virtual ~SpecialLogger_IF() {};
};
class SpecialLogger : public SpecialLogger_IF
{
public:
void log( string message, string extra )
{
this->out( message );
this->extra( extra );
}
private:
void extra( string extra )
{
cout << "^ EXTRA: " << extra << endl;
}
};
int main( int argc, char *argv[] )
{
Logger_IF* logger = new Logger();
logger->log( "message" );
delete logger;
SpecialLogger_IF* spLogger = new SpecialLogger();
spLogger->log( "message" );
spLogger->log( "message", "extra" );
delete spLogger;
}
我收到以下错误:
testing.cpp:62:27: error: too few arguments to function call, expected 2, have 1
spLogger->log( "message" );
~~~~~~~~~~~~~ ^
testing.cpp:34:3: note: 'log' declared here
virtual void log( string message, string extra ) = 0;
^
1 error generated.
有趣的是,this->out( message )
内部调用void log( string message, string extra )
确实有效,因此发生了一些继承。
我正在做的事情是正确的和可能的,还是我错过了什么。
问候
铝