纯虚函数与抽象函数
纯虚函数格式:
virtual 函数类型 函数名(参数列表)=0;
- eg:virtual float area() const {return 0;}
- 或:virtual float area() const =0;
抽象函数定义:
- 如果声明了一类,一般可以用它定义对象,但是在面向对象程序设计中,他们不用生成对象,
- 定义这些类的唯一目的是用它作为基类去建立派生类。
- 凡是包含纯虚函数的类都是抽象类,因为纯虚函数不能被调用的,包含纯虚函数的类是无法建立对象的。
- 抽象类的作用是作为一个类族的共同基类,后者说,为一个类族提供一个共接口。
- 如果在抽象类所派生出的新类中欧对基类的所有纯虚函数进行了定义,那么这些函数就被赋予可功能,可以被调用,
- 这个派生类就不是抽象类,而是可以用来定义的对象的具体类。
- 如果在派生类中没有对所有纯虚函数进行定义,则这派生类仍然是抽象类,不能定义对象
总结:
- 抽象类,在派生类中纯虚函数一定要重新定义虚函数;
- 也可以是无论什么虚函数,只要要用时就重新定义就行;
- 包含纯虚函数的类一定是抽象类;
- 抽象类不能定义对象;
- 抽象类可以定义指针指向抽象类数据的指针变量,
- 当派生类成为具体类之后,可以用这种指针指向派生类对象,
- 让后通过该指针调用虚函数,实现堕胎性操作;
#include
using namespace std;
//称明抽象类基类Shape
class shape
{
public:virtual float area()const{return 0.0; //虚函数}virtual float volume() const{return 0.0; //虚函数}virtual void shapeName()const=0;//纯虚函数
};
//声明point类成员函数
class point:public shape
{
public:point(float=0,float=0);//声明构造函数void setpoint(float,float);//设置y坐标float getX() const{return x;}float getY() const{return y;}virtual void shapeName()const{cout<<"point:"; //对虚函数进行在定义}friend ostream & operator<< (ostream &,const point &); //运算符重载
protected:float x;float y;
};
//定义point成员函数
point::point(float a,float b)
{x=a;y=b;
}
void point::setpoint(float a,float b)
{x=a;y=b;
}
ostream & operator <<(ostream &output,const point &p)
{output<<"["<area()<<"\nvolime="<volume()<shapeName();cout<<"x="<area()<<"\nvolime="<volume()<
结果:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
