C++抽象类

如果声明了一个类,一般可以用它定义对象。但是在面对对象程序设计中,往往有一些类,它们不用来生成对象。定义这些类的唯一目的就是用它作为基类去建立派生类。

抽象类是为了抽象和设计的目的而建立的,处于继承层次结构的上层。

具体类是能够建立对象的类。

抽象类的规定

(1)抽象类只能用作其他类的基类,不能建立抽象类对象。

(2)抽象类不能用作参数类型、函数返回类型或显式转换的类型。

(3)可以定义指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。

如果在抽象类所派生出的新类中对基类的所有纯虚函数进行了定义,那么这些函数就被赋予了功能可以被调用。这个派生类就不是抽象类,而是可以用来定义对象的具体类。如果在派生类中没有对所有纯虚函数进行定义,则此派生类仍然是抽象类,不能用来定义对象。

虽然抽象类不能定义对象,但是可以定义指向抽象类数据的指针变量。当派生类称为具体类之后,就可以用这种指针指向派生类对象,然后通过该指针调用虚函数,实现多态性的操作。

#include<iostream>  
using namespace std;  

const double PI=3.14159;  

class Shapes   //抽象类  
{  
protected:  
    int x, y;  
public:  
    void setvalue(int d, int w=0){x=d;y=w;}  
    virtual void disp()=0;//纯虚函数  
};  

class Square:public Shapes  
{  
public:  
    void disp(){  
        cout<<"矩形面积:"<<x*y<<endl;  
    }  
};  

class Circle:public Shapes{  
public:  
    void disp(){  
        cout<<"圆面积:"<<PI*x*x<<endl;  
    }  
};  

int main()  
{  
    Shapes *ptr[2]; //定义对象指针数组  
    Square s1;  
    Circle c1;  
    ptr[0] = &s1;  
    ptr[0]->setvalue(10, 5);  
    ptr[0]->disp();  
    ptr[1] = &c1;  
    ptr[1]->setvalue(10);  
    ptr[1]->disp();  
    return 0;  

}  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值