我被卡住,已經嘗試了很多解決這個「虛擬」的問題,所以我求求你幫我,因爲它可能是一些愚蠢的事,一個「訓練有素的眼睛」,可以在幾秒鐘內解決..不叫爲C++虛方法所需
的問題:當我在主要如下:
PrologConnector swiProlog;
swiProlog = PrologConnector::connectorFactory(PrologConnector::swi,argv);
swiProlog.send("blabla");
總是PrologConnector類的send方法被調用,而不是從子類中的一個.. 你看到的問題?
感謝您的幫助!
下面的代碼: PrologConnector.h
class PrologConnector {
virtual int send(char * cmd);
virtual int init(char **argv);
static PrologConnector connectorFactory(Prolog prolog, char ** argv);
};
PrologConnector.cpp
int PrologConnector::send(char * argv) {
std::cout << "not wanted"<<std::endl;
return 0;
}
int PrologConnector::init(char **argv) {
//TODO add implementation
return 0;
}
PrologConnector PrologConnector::connectorFactory(Prolog prolog, char **argv) {
if (prolog == swi) {
SWIConnector sc;
sc.init(argv);
return sc;
}
std::cout <<"Error in initialization!"<<std::endl;
PrologConnector pc;
return pc;
}
SWIConnector.h:
class SWIConnector : public PrologConnector {
int send(char *cmd);
int init(char **argv);
};
SWIConnector.cpp:
int SWIConnector::init(char **argv) {
//some action going on
}
int SWIConnector::send(char * cmd) {
//some action going on
}
您只能如果您創建通過基類調用重寫功能指向基類的對象,並用派生類的實例初始化它。 –
[C++中的切片問題](http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c) – jrok