纯虚函数 订阅
纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。纯虚函数也可以叫抽象函数,一般来说它只有函数名、参数和返回值类型,不需要函数体。这意味着它没有函数的实现,需要让派生类去实现。C++中的纯虚函数,一般在函数签名后使用=0作为此类函数的标志。Java、C#等语言中,则直接使用abstract作为关键字修饰这个函数签名,表示这是抽象函数(纯虚函数)。 展开全文
纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。纯虚函数也可以叫抽象函数,一般来说它只有函数名、参数和返回值类型,不需要函数体。这意味着它没有函数的实现,需要让派生类去实现。C++中的纯虚函数,一般在函数签名后使用=0作为此类函数的标志。Java、C#等语言中,则直接使用abstract作为关键字修饰这个函数签名,表示这是抽象函数(纯虚函数)。
信息
存在原因
方便使用多态特性
外文名
pure virtual function
其它名称
抽象函数
中文名
纯虚函数
归    类
计算机、C++
特    性
只有函数签名,没有实现
纯虚函数定义
纯虚函数是一种特殊的虚函数,它的一般格式如下(C++格式):class <类名>{virtual <类型><函数名>(<参数表>)=0;…};在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。纯虚函数可以让类先具有一个操作名称,而没有操作内容,让派生类在继承时再去具体地给出定义。凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服务。除非在派生类中完全实现基类中所有的的纯虚函数,否则,派生类也变成了抽象类,不能实例化对象。一般而言纯虚函数的函数体是缺省的,但是也可以给出纯虚函数的函数体(此时纯虚函数仍然为纯虚函数,对应的类仍然为抽象类,还是不能实例化对象)调用纯虚函数的方法为:抽象类类名::纯虚函数名(实参表)
收起全文
精华内容
下载资源
问答
  • 纯虚函数

    2019-09-25 22:21:17
    文章目录什么是纯虚函数使用纯虚函数的注意事项 什么是纯虚函数 纯虚函数(pure virtual function)是指被标明为不具体实现的虚拟成员函数。通常情况下,纯虚函数常用在这种情况:定义一个基类时,基类中虚函数的...

    什么是纯虚函数

    纯虚函数(pure virtual function)是指被标明为不具体实现的虚拟成员函数。通常情况下,纯虚函数常用在这种情况:定义一个基类时,基类中虚函数的具体实现由于必须依赖派生类的具体情况从而无法在基类中确切定义,此时可以把这个虚函数定义为纯虚函数
    在这里插入图片描述

    使用纯虚函数的注意事项

    1. 含有纯虚函数的基类是不能用来定义对象的。纯虚函数没有实现部分,不能产生对象,所以含有纯虚函数的类是抽象类
    2. 定义纯虚函数时,不需要定义函数的实现部分(因为没有意义,即使定义了函数的实现部分,编译器也不会对这部分代码进行编译)
    3. “=0” 表明程序员将不定义该函数,函数声明是为派生类保留一个位置。“=0” 的本质是将指向函数体的指针定位 NULL
    4. 派生类必须重定义基类中的所有纯虚函数,少一个都不行,否则派生类中由于仍包含纯虚函数(从基类中继承而来),系统会仍将该派生类当成一个抽象类而不允许其实例
    #include<iostream>
    using namespace std;
    class Animal{ //基类,抽象类
    public:
        virtual void eat()=0; //纯虚函数 
        virtual void sleep()=0; 
    };
    
    class Person:public Animal{ //子类1
    public:
        void eat(){
            cout<<"Person eat"<<endl;
        } 
        void sleep(){
            cout<<"Person sleep"<<endl;
        }
    }; 
    
    class Dog:public Animal{ //子类2
    public:
        void eat(){
            cout<<"Dog eat"<<endl; 
        } 
        void sleep(){
            cout<<"Dog eat"<<endl;
        }
    };
    
    void func(Animal &a){
        a.eat();
        a.sleep();
    }
    int main(){
        Person person;
        func(person);
        cout<<"------分界线-----------"<<endl;
        Dog dog;
        func(dog);
        return 0;
    }
    

    在这里插入图片描述

    展开全文
  • 什么是纯虚函数 纯虚函数的作用 如何定义使用纯虚函数   一 定义: 纯虚函数是一种特殊的虚函数,它的一般格式如下:   class <类名>   {   virtual <类型><函数名>(&...
    什么是纯虚函数 纯虚函数的作用 如何定义使用纯虚函数  


    一 定义:

    纯虚函数是一种特殊的虚函数,它的一般格式如下: 
      class <类名> 
      { 
      virtual <类型><函数名>(<参数表>)=0; 
      … 
      }; 
      在许多情况下,在基类中不能对虚函数给出有意义有实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。

    二 引入原因:

    1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。 
      2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 
      为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重载以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。这样就很好地解决了上述两个问题。

    三 特性:

     

    1、多态性

      指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。C++支持两种多态性:编译时多态性,运行时多态性。

      a.编译时多态性:通过重载函数实现

      b 运行时多态性:通过虚函数实现。

      2、虚函数

      虚函数是在基类中被声明为virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态重载

      3、抽象类

      包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。

     
    展开全文
  • C++学习笔记之纯虚函数和抽象类/纯虚函数和抽象类的学习/纯虚函数和抽象类学习 在多态中,通常父类中虚函数的实现是无意义的,主要就是调用子类重写的内容因此可以将虚函数改为纯虚函数 纯虚函数语法: virtual ...

    C++学习笔记之纯虚函数和抽象类/纯虚函数和抽象类的学习/纯虚函数和抽象类学习
    在多态中,通常父类中虚函数的实现是无意义的,主要就是调用子类重写的内容因此可以将虚函数改为纯虚函数
    纯虚函数语法:

    virtual 返回值类型 函数名 (参数列表) = 0;
    

    当类中纯虚函数,这个类也称为抽象类
    抽象类的特点
    无法实例化对象
    子类必须重写抽象类的纯虚函数,否则也属于抽象类

    #include <iostream>
    using namespace std;
    //在多态中,通常父类中虚函数的实现的毫无意义的主要都是调用重写的内容
    //因此可以将虚函数改为纯虚函数
    //纯虚函数: virtual 返回值类型 函数名(参数列表 ) = 0
    //抽象类特点:
    //1. 无法实例化对象
    //2. 子类必须是重写抽象类中的纯虚函数, 否则也属于抽象类
    
    class Base
    {
    public:
    	//纯虚函数
    	//类中只要有一个纯虚函数就称为抽象类
    	//抽象类无法实例化对象
    	//子类必须重写父类中的纯虚函数, 否则也属于抽象类
    	virtual void func() = 0;
    };
    class Son : public Base
    {
    public:
    	virtual void func()
    	{
    		cout << "func调用" << endl;
    	}
    };
    void test()
    {
    	Base* base = NULL;
    	//Base* base = new Base;	错误,抽象类无法实例化对象
    	base = new Son;
    	//使用父类指针指向子类对象
    	base->func();
    	delete base;	//记得销毁
    }
    int main()
    {
    	test();
    	return 0;
    }
    

    C++学习笔记之纯虚函数和抽象类/纯虚函数和抽象类的学习/纯虚函数和抽象类学习

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,589
精华内容 3,035
关键字:

纯虚函数