1 つの純粋仮想関数が定義されている Logger_IF を実装する C++ クラス Logger があります。
virtual void log( string message ) = 0;
Logger を独自のインターフェイスで独自のクラスに拡張したいと思います。SpecialLogger_IF を拡張するクラス SpecialLogger を呼び出しました。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 )
は機能するため、いくつかの継承が行われています。
私がやっていることは正しくて可能ですか、それとも何かが足りないのですか。
よろしく
アル