デストラクタで純粋仮想関数を呼び出したいのですがうまくいきません。
純粋仮想関数の中身を実装しないとコンパイル時に関数がないと言われるのですがなんででしょう?
↓ソースはこんな感じです。

#include <time.h>
#include <iostream>
class DyingMessage{
  virtual void say1() = 0;
  virtual void say2() = 0;
protected:
  ~DyingMessage(){
    ( time(NULL) %2 ) ? say1() : say2();
  }
};
class JiipanKeiji : public DyingMessage {
  void say1(){ std::cout << "なんじゃこりゃー"; }
  void say2(){ std::cout << "おらぁ死にたくないよ、死にたくない、死にたくないよ・"; }
};
class RAOU : public DyingMessage {
  void say1(){ std::cout << "我が生が(略"; }
  void say2(){ std::cout << "我が生涯に一片の悔いなし!ウオァァァアア!"; }
};
int main(void){
  JiipanKeiji jk;
  RAOU r;
}