C++虚拟方法没有按需要调用

Fre*_*mpe 3 c++

我被困了,已经尝试了很多来解决这个"虚拟"问题,所以我求求你帮助我,因为它可能是一个愚蠢的"受过训练的眼睛"可以在几秒钟内解决..

问题:当我在main中执行以下操作时:

PrologConnector swiProlog;
swiProlog = PrologConnector::connectorFactory(PrologConnector::swi,argv);
swiProlog.send("blabla");
Run Code Online (Sandbox Code Playgroud)

始终调用PrologConnector类的send方法,但不调用子类中的方法..您是否看到了问题?

谢谢您的帮助!!

这是代码:PrologConnector.h

class PrologConnector {
   virtual int send(char * cmd);
   virtual int init(char **argv);
   static PrologConnector connectorFactory(Prolog prolog, char ** argv);
};
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

SWIConnector.h:

class SWIConnector : public PrologConnector {
  int send(char *cmd);
  int init(char **argv);
};
Run Code Online (Sandbox Code Playgroud)

SWIConnector.cpp:

int SWIConnector::init(char **argv) {
//some action going on
}


int SWIConnector::send(char * cmd) {

//some action going on
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 6

你在这里有对象切片.为了以多态方式使用对象,您必须通过指针或引用来访问它们.

应更改工厂方法的签名以返回a PrologConnector*PrologConnector&,之后您将能够看到预期的行为.