虚函数与纯虚函数

虚函数与纯虚函数
C++面向对象程序设计有三大思想:抽象,继承,多态。其中多态的实现建立在子类继承父类的基础上,它是由C++编译器的一个核心技术实现,即动态绑定技术。其核心思想是父类对象调用子类对象的方法。而父类对象调用子类对象的方法时,这个被调用的方法必须在父类中声明为虚函数,因此虚函数是实现多态的一个中介。而纯虚函数是将父类上升为一个抽象类,抽象类无法实例化,只有方法的声明,其实现由其子类完成。就像动物无法实例化为具体的对象,而老虎、狮子都可以继承动物的特性(即父类的接口),从而有自己的实例化对象。
以下是虚函数和纯虚函数的区别点:
1、类如果声明了虚函数,这个函数是实现了的,即使是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖,这样编译器就可以使用动态绑定来达到多态的目的(即父类指针指向子类对象,调用子类方法)。而纯虚函数只是在基类中的一个函数定义,即是一个函数声明而已,具体的实现需要留到子类当中。
2、虚函数在子类里面也可以不进行重写(只有虚方法和抽象方法才能够被重写);但纯虚函数必须在子类去实现。
3、虚函数的类用于“实作继承”,也就是说继承接口的同时也继承了父类的实现。当然,子类也可以进行覆写,从而完成自己关于此函数的实现。纯虚函数的类用于“介面继承”,即纯虚函数关注的是接口的统一性,实现由子类去完成。
4、带纯虚函数的类叫做抽象类,这种类不能直接生成对象,而只有被继承,并重写其虚函数后,才能使用。
以上内容为转载;
代码展示:
#include <iostream>

using namespace std;
class Base
{
public:
    Base(double a,double b)
     {
         h=a;
         r=b;
     }
    virtual void disp()//虚函数
    {
        cout<<"基类虚函数调用"<<endl;
    }
//private:
    int h;
    int r;
};
class Cuboid:public Base
{
public:
    Cuboid (double a):Base(a,a){};
    /*void disp()
    {
        cout<<h*h<<endl;
    }*/

};
class Cylinder:public Base
{
public:
    Cylinder(double a,double b): Base(a,b){};
    void disp()
    {
        cout<<r*r*3.1415*h<<endl;
    }

};
int main()
{
    Base *pc;
    Cuboid s1(2);
    Cylinder s2(2,4);
    pc=&s1;
    pc->disp();
    pc=&s2;
    pc->disp();
    return 0;
}
运行结果展示:

基类虚函数调用
100. 528

#include <iostream>

using namespace std;
class Base
{
public:
    Base(double a,double b)
     {
         h=a;
         r=b;
     }
    /*virtual void disp()//虚函数
    {
        cout<<"基类虚函数调用"<<endl;
    }*/
    virtual void disp()=0;//纯虚函数
//private:
    int h;
    int r;
};
class Cuboid:public Base
{
public:
    Cuboid (double a):Base(a,a){};
    void disp()
    {
        cout<<h*h<<endl;
    }

};
class Cylinder:public Base
{
public:
    Cylinder(double a,double b): Base(a,b){};
    void disp()
    {
        cout<<r*r*3.1415*h<<endl;
    }

};
int main()
{
    Base *pc;
    Cuboid s1(2);
    Cylinder s2(2,4);
    pc=&s1;
    pc->disp();
    pc=&s2;
    pc->disp();
    return 0;
}
运行结果展示;

4
100. 528

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值