/**
*cppTest-8.2:虚函数与多态性
*
*author 炜sama
*/
#include<iostream.h>
class point{
float x,y;
public:
point(){};
point(float i,float j){ x=i; y=j; }
//@@虚函数在声明时就带上virtual,然后给子类去重写,重写时可以省略virtual关键字!
//虚基类在定义时不用带上virtual关键字,而是在继承时才指明哪个父类作为虚基类来继承~
virtual float area(){ return 0.0; }
};
const float pi=3.1415926f;
class circle:public point{
float radius;
public:
circle(float r){ radius=r; }
float area(){ return pi*radius*radius; }//这里可以省略virtual关键字
void show(){cout<<radius<<endl;}
};
void main()
{
point *p,d(1.0,2.0);
p=&d;
cout<<"The area of the point d is "<<p->area()<<endl;
circle c(3.65637f);
p=&c;
//@@如果父类没有把这个函数定义为虚函数,那么这里调用的就是父类的函数,显示的是0!!!这就是所谓的多态。
//可见C++实现多态需要借助虚函数。Java与C++的不同就在这里,Java没有虚函数,一般函数就可以达到这种效果!!
cout<<"The area of the circle c is "<<p->area()<<endl;
//cout<<p->show();//父类指针不能直接访问子类新定义的成员!
((circle*)p)->show();//需要强制转换为子类指针。这个与Java相同
circle *pc;
pc=&c;
//pc=p;//子类指针不能指向父类指针!这个与Java不同!
//pc=&d;//同上
}
cppTest-8.2:虚函数与多态性
最新推荐文章于 2024-09-01 16:42:17 发布