1.基类的虚构函数必须声明为虚的。
class Rodent {
public:
virtual void eat() {
cout << "Rodent eat...." << endl;
}
virtual void run() {
cout << "Rodent run..." << endl;
}
virtual ~Rodent() = 0;
};
Rodent::~Rodent() {
cout << "~Rodent..." << endl;
}
class Mouse :public Rodent {
public:
void eat() {
cout << "Mouse eat..." << endl;
}
void run() {
cout << "Mouse run..." << endl;
}
~Mouse() {
cout << "~Mouse..." << endl;
}
};
class Gerbil :public Rodent {
public:
void eat() {
cout << "Gerbil eat..." << endl;
}
void run() {
cout << "Gerbil run..." << endl;
}
~Gerbil() {
cout << "~Gerbil..." << endl;
}
};
class Hamster :public Rodent {
public:
void eat() {
cout << "Hamster eat..." << endl;
}
void run() {
cout << "Hamster run..." << endl;
}
~Hamster() {
cout << "~Hamster..." << endl;
}
};
class BlueHamster :public Hamster {
public:
~BlueHamster(){
}
};
2.纯虚析构函数必须有定义。没有定义的话就有:error LNK2019: 无法解析的外部符号 “public: virtual __thiscall A::~A(void)” (??1A@@UAE@XZ),