我有一個實現Logger_IF C++類記錄儀具有定義一個純虛函數:C++的繼承問題,不能調用基類中定義公共職能
virtual void log(string message) = 0;
我想記錄器延伸到我自己帶有自己的界面的類。我已經調用了我的類SpecialLogger,它擴展了SpecialLogger_IF。 SpecialLogger_IF本身擴展了記錄器。我已經定義:
virtual void log(string message, string extra) = 0;
我SpecialLogger_IF類。據我瞭解,我應該仍然可以通過SpecialLogger_IF以及日誌(「message」,「extra」)來調用日誌(「消息」),但是我無法使其工作。
#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)
不工作,使一些繼承發生。
是我在做什麼正確和可能,或者我是否錯過了一些東西。
問候
鋁
[在一個子類重載一個虛擬函數]的可能重複(http://stackoverflow.com/questions/8816794/overloading-a-virtual-function-in-a-child-class) –