多态-虚函数小试

博客介绍了动态类型和静态类型的概念,指出在继承关系中可能出现两者不一致,这是多态的基础。还阐述了纯虚函数的作用,包含纯虚函数的类为抽象类,抽象类只能作基类,若派生类实现纯虚函数则不再是抽象类。

动态类型与静态类型:
动态类型 变量或表达式中表示的内存中对象的类型
静态类型 变量声明的类型或表达式中的类型
一般来说引用或指针的类型应与对象的类型一致,但在存在继承关系的对象中是一个重要的例外,(我们可以将基类的指针绑定到派生类对象上)由此可能出现静态类型与动态类型不一致的情况,这便是多态的基础。

#include <bits/stdc++.h>
using namespace std;
class Point
{
    double x;
    double y;
public:
    Point(double x_,double y_)
    {
        x=x_;
        y=y_;
    }
    virtual double area()=0;//纯虚函数
    virtual double volumn()=0;
};
class Circle:public Point
{
    double r;

public:
    Circle(double x_,double y_,double r_):Point(x_,y_){r=r_;}
    virtual double area(){return 3.14*r*r;}
    virtual double volumn(){return 0;}
};
class Clinder:public Circle
{
    double h;
public:
    Clinder(double x_,double y_,double r_,double h_):Circle(x_,y_,r_){h=h_;}//派生类只负责其直接基类的构造函数调用,但在派生类存在虚基类时,所有的虚基类都由最后的派生类负责初始化
    virtual double volumn(){return area()*h;}//由于area()为公有,故此处可以直接使用
};
int main()
{
   Point *p;
   Point *c;
   Circle a(1,2,3);
   Clinder b(1,2,3,4);
   p=&a;
   c=&b;//动态联编
   cout<<p->area()<<endl;
   cout<<c->volumn()<<endl;
   cout<<b.volumn()<<endl;//静态联编
}

►纯虚函数的作用是在基类中为其派生类保留一个函数的名字,以便 派生类根据需要对它进行定义。如果在一个类中声明了纯虚函数, 而在其派生类中没有对该函数定义,则该虚函数在派生类中仍然为 纯虚函数。
►包含有纯虚函数的类称为抽象类(abstract class)。一个抽象类只 能作为基类来派生新类,所以又称为抽象基类(abstract base class)。抽象类不能定义对象 。
►如果在派生类中给出了抽象类的纯虚函数的实现,则该派生类不再 是抽象类。否则只要派生类仍然有纯虚函数,则派生类依然是抽象 类。抽象类至少含有一个虚函数,而且至少有一个虚函数是纯虚函 数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值