1.virtual将函数分为虚函数和非虚函数,其中虚函数又分为纯虚函数和非纯虚函数。
2.一个类函数一个以上的纯虚函数就是抽象类,抽象类不能使用因而不可输出,能输出的必须进行实体化。实体化的方法是在派生类中进行重新定义,将其转化为虚函数(不是纯虚函数)。纯虚函数没有实际意义,只是作为一个接口,或者提醒。
3.我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。
#include<iostream>
#include<cmath>
#define pi 3.1415926
using namespace std;
class Shape
{
public:
virtual float printArea()=0;
};
class Circle:public Shape
{
public:
Circle();
Circle(float );
virtual float printArea();
friend ostream& operator<<(ostream& ,Circle &);
protected:
float radius;
};
float Circle::printArea()
{
return pi*radius*radius;
}
ostream& operator<<(ostream &out,Circle &c)
{
out<<"Circle="<<c.printArea();
return out;
}
Circle::Circle()
{
radius=0;
}
Circle::Circle(float r)
{
radius=r;
}
//
class Rectangle:public Shape
{
public:
Rectangle();
Rectangle(float ,float );
virtual float printArea();
friend ostream& operator<<(ostream &,Rectangle &);
protected:
float x,y;
};
float Rectangle::printArea()
{
return x*y;
}
ostream& operator<<(ostream& out,Rectangle &r)
{
out<<"Rectangle="<<r.printArea();
return out;
}
Rectangle::Rectangle()
{
x=0,y=0;
}
Rectangle::Rectangle(float a,float b)
{
x=a;
y=b;
}
class Triangle:public Shape
{
public:
Triangle();
Triangle(float ,float ,float );
virtual float printArea();
friend ostream& operator<<(ostream &,Triangle &t);
protected:
float x,y,z;
};
float Triangle::printArea()
{
return x*y*z;
}
ostream& operator<<(ostream &out,Triangle &t)
{
out<<"Triangle="<<t.printArea();
return out;
}
Triangle::Triangle(float a,float b,float c)
{
x=a,y=b,z=c;
}
Triangle::Triangle()
{
x=0,y=0,z=0;
}
int main()
{
Circle circle(12.6);
cout<<circle<<endl;
Rectangle rectangle(4.5,8.4);
cout<<rectangle<<endl;
Triangle triangle(0.5,4.5,8.4);
cout<<triangle<<endl;
return 0;
}