1 #include<iostream> 2 #include<math.h> 3 using namespace std; 4 class Shape{ 5 public: 6 virtual double Area()=0; 7 }; 8 class Triangle:public Shape{ 9 double a,b,c; 10 public: 11 Triangle(double e1,double e2,double e3){ 12 a = e1; 13 b = e2; 14 c = e3; 15 } 16 double Area(){ 17 double s = 0.5*(a+b+c); 18 return sqrt(s*(s-a)*(s-b)*(s-c)); 19 } 20 }; 21 class Rectangle:public Shape{ 22 double a,b; 23 public: 24 Rectangle(double e1,double e2){ 25 a = e1; 26 b = e2; 27 } 28 double Area(){ 29 return a*b; 30 } 31 }; 32 class Cricle:public Shape{ 33 public: 34 double Shape::Area(){ 35 36 }//显式重写,意义与覆盖相同 37 }; 38 int main(){ 39 Shape *p; 40 Triangle t(3.0,4.0,5.0); 41 Rectangle r(3.0,4.0); 42 //虽然p是父类指针,因为有virtual ,所以会根据实际对象调用方法。 43 p = &t; 44 cout<<"The area of triangle is :"<<p->Area()<<endl; 45 p = &r; 46 cout<<"The area of rectangle is :"<<p->Area()<<endl; 47 } 48 /* 49 纯虚函数:是一个只声明而不定义的函数。 50 virtual type funcname(prara-list)=0; 51 纯虚函数是一个没有定义的函数,所以包含该函数的类 52 不能被实例化,它只能留到派生类中去实现, 53 所以该类为抽象类。 54 55 1、只有虚函数才能够只声明而不实现。 56 2、如果派生类没有实现纯虚函数的覆盖,则派生类也属于抽象类 57 3.其实抽象类的含义指:不能实例化的类,这种类包含两种: 58 一种是里面含有纯虚函数 59 第二种是构造函数的访问权限定义为private或protected 60 4、一般抽象类作为公共的根。 61 5、虽然抽象类不能被实例化,但是仍然可以定义抽象类的指针(或引用), 62 该指针(或引用)指向派生类的对象。 63 */