没用虚函数的坏处:
1.如果以一个"基类之指针"指向"派生类之对象",那么经由该指针你只能够调用基类所定义的函数。
2.如果基类和派生类都定义了"相同名称的成员函数",那么通过对象指针调用成员函数时,到底调用哪个函数,要根据该指针的原始类型而定,而不是视指针实际所指的对象类型而定。
如果用了虚函数,这些情况就不存在了。
虚函数的总结:
1.如果想在派生类中重新定义一个成员函数,那么就应该在基类中把该函数设为"virtual"。
2.以单一指令调用不同函数(这句话不好理解,下面会解释),这种性质就是"多态"。
3.虚函数是C++语言的多态性质和动态绑定的关键。
4.既然抽象类中的虚函数不打算被调用,我们就不应该定义它,应该把它设为纯虚函数(在函数声明后加上"=0"即可)。
5.拥有纯虚函数的类叫做抽象类,不能产生出对象实例,但是可以拥有指向抽象类的指针,以便于操作抽象类的各个派生类。
6.虚函数派生下去仍是虚函数,而且可以省略virtual关键词。
解释2: CShape* psh[2];
psh[0] = new CCircle();
psh[1] = new CSquare();
for(int i=0;i<2;i++)
psh[i]->display(); //这就是单一指令,但是由于display是虚函数,所以会分别调用CCircle和CSquare的display方法。