|
//+------------------------------------------------------------------+ //| Абстрактный базовый класс | //+------------------------------------------------------------------+ class CAnimal { public: //--- чисто виртуальная функция virtual void Sound(void)=NULL; //--- функция void CallSound(void) { Sound(); } //--- конструктор CAnimal() { //--- явный вызов виртуального метода Sound(); //--- неявный вызов (через третью функцию) CallSound(); //--- в конструкторе и/или деструкторе всегда вызываются свои функции, //--- несмотря на виртуальность и переопределение вызываемой функции в потомке //--- если вызываемая функция чисто виртуальная, то //--- вызов приведет к критической ошибке выполнения: "pure virtual function call" } };
|
|
//+------------------------------------------------------------------+ //| An abstract base class | //+------------------------------------------------------------------+ class CAnimal { public: //--- a pure virtual function virtual void Sound(void)=NULL; //--- function void CallSound(void) { Sound(); } //--- constructor CAnimal() { //--- an explicit call of the virtual method Sound(); //--- an implicit call (using a third function) CallSound(); //--- a constructor and/or destructor always calls its own functions, //--- even if they are virtual and overridden by a called function in a derived class //--- if the called function is purely virtual //--- the call causes the "pure virtual function call" critical execution error } };
|
|
//+------------------------------------------------------------------+ //| 一个抽象基类 | //+------------------------------------------------------------------+ class CAnimal { public: //--- 一个纯虚函数 virtual void Sound(void)=NULL; //--- 函数 void CallSound(void) { Sound(); } //--- 构造函数 CAnimal() { //--- 显式调用虚拟类函数 Sound(); //--- 隐式调用(使用第三个函数) CallSound(); //--- 构造函数和/或析构函数总是调用其自己的函数, //--- 即使它们是虚拟函数,并且在派生类被调用的函数覆写 //--- 如果调用的函数是纯虚函数 //--- 这个调用会导致 "纯虚函数调用"的关键执行错误 } };
|