精华内容
下载资源
问答
  • 纯虚函数: 一个函数只有函数名...含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。 定义纯虚函数就是为了让基类不可实例化化,因为实例化这样的抽象...

    在设计时,常常希望基类仅仅作为其派生类的一个接口。这就是说,仅想对基类进行向上类型转换,使用它的接口,而不希望用户实际的创建一个基类的对象。同时创建一个纯虚函数允许接口中放置成员原函数,而不一定要提供一段可能对这个函数毫无意义的代码。

    做到这点,可以在基类中加入至少一个纯虚函数(pure virtual function),使得基类称为抽象类(abstract class).

    • 纯虚函数: 一个函数只有函数名和形参列表,没有具体实现;语法:virtual double GetArea()=0;

    如果父类中有了 纯虚函数 子类继承父类,就必须要实现 纯虚函数
    如果父类中 有了 纯虚函数 ,这个父类 就无法实例化对象了

    • 抽象类: 在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象。抽象类是不完整的,它只能用作基类。

    含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。

    定义纯虚函数就是为了让基类不可实例化化,因为实例化这样的抽象数据结构本身并没有意义.或者给出实现也没有意义。定义纯虚函数的一般形式为:

    class 类名{
    virtual 返回值类型函数名(参数表)= 0; // 后面的"= 0"是必须的,否则,就成虚函数了
    };
    

    纯虚函数是一个在基类中说明的虚函数,它在基类中没有定义,要求任何派生类都定义自己的版本。纯虚函数为各派生类提供一个公共界面。从基类继承来的纯虚函数,在派生类中仍是虚函数。
    当继承一个抽象类的时候,必须实现所有的纯虚函数,否则由抽象类派生的类也是一个抽象类。

    建立公共接口目的是为了将子类公共的操作抽象出来,可以通过一个公共接口来操纵一组类,且这个公共接口不需要事先(或者不需要完全实现)。可以创建一个公共类.

    案例: 模板方法模式
    在这里插入图片描述

    //抽象制作饮品
    class AbstractDrinking{
    public:
    	//烧水
    	virtual void Boil() = 0;
    	//冲泡
    	virtual void Brew() = 0;
    	//倒入杯中
    	virtual void PourInCup() = 0;
    	//加入辅料
    	virtual void PutSomething() = 0;
    	//规定流程
    	void MakeDrink(){
    		Boil();
    		Brew();
    		PourInCup();
    		PutSomething();
    	}
    };
    
    //制作咖啡
    class Coffee : public AbstractDrinking{
    public:
    	//烧水
    	virtual void Boil(){
    		cout << "煮农夫山泉!" << endl;
    	}
    	//冲泡
    	virtual void Brew(){
    		cout << "冲泡咖啡!" << endl;
    	}
    	//倒入杯中
    	virtual void PourInCup(){
    		cout << "将咖啡倒入杯中!" << endl;
    	}
    	//加入辅料
    	virtual void PutSomething(){
    		cout << "加入牛奶!" << endl;
    	}
    };
    
    //制作茶水
    class Tea : public AbstractDrinking{
    public:
    	//烧水
    	virtual void Boil(){
    		cout << "煮自来水!" << endl;
    	}
    	//冲泡
    	virtual void Brew(){
    		cout << "冲泡茶叶!" << endl;
    	}
    	//倒入杯中
    	virtual void PourInCup(){
    		cout << "将茶水倒入杯中!" << endl;
    	}
    	//加入辅料
    	virtual void PutSomething(){
    		cout << "加入食盐!" << endl;
    	}
    };
    
    //业务函数
    void DoBussiness(AbstractDrinking* drink){
    	drink->MakeDrink();
    	delete drink;
    }
    
    void test(){
    	DoBussiness(new Coffee);
    	cout << "--------------" << endl;
    	DoBussiness(new Tea);
    }
    
    展开全文
  • 1.形如: virtual 返回类型 函数名 (形参表) = 0;...3.除了构造函数和析构函数以外全部成员函数都是纯虚函数的抽象类叫做纯抽象类,亦称接口类 #include <iostream> using namespace std; cl...

    1.形如:
    virtual 返回类型 函数名 (形参表) = 0;
    的虚函数,称为纯虚函数或抽象方法,表达一种抽象化的行为概念
    2.如果一类含有至少一个纯虚函数,那么该类就是一个抽象类,抽象类不能被实例化为对象
    3.除了构造函数和析构函数以外全部成员函数都是纯虚函数的抽象类叫做纯抽象类,亦称接口类

    
    #include <iostream>
    using namespace std;
    class Animal {
    public:
    	virtual void eat (void) = 0;
    	virtual void run (void) = 0;
    	virtual void cry (void) = 0;
    };
    void zoo (Animal* animal) {
    	animal->eat ();
    	animal->run ();
    	animal->cry ();
    }
    class Dog : public Animal {
    public:
    	void eat (void) {
    		cout << "狗吃骨头" << endl;
    	}
    	void run (void) {
    		cout << "狗在奔跑" << endl;
    	}
    	void cry (void) {
    		cout << "狗汪汪叫" << endl;
    	}
    };
    class Rabbit : public Animal {
    public:
    	void eat (void) {
    		cout << "兔子吃萝卜" << endl;
    	}
    	void run (void) {
    		cout << "兔子在跳跃" << endl;
    	}
    	void cry (void) {
    		cout << "兔子在尖叫" << endl;
    	}
    };
    int main (void) {
    	Dog dog;
    	Rabbit rabbit;
    	zoo (&dog);
    	zoo (&rabbit);
    	return 0;
    }
    
    
    展开全文
  • 面试真题C++:1.什么是抽象类?什么是纯虚函数?纯虚函数跟一般的虚函数有什么区别? 纯虚函数: 一个函数只有函数名和...含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,...

    面试真题C++:1.什么是抽象类?什么是纯虚函数?纯虚函数跟一般的虚函数有什么区别?

    纯虚函数: 一个函数只有函数名和形参列表,没有具体实现;语法:virtual double GetArea()=0;
    抽象类: 在C++中,含有纯虚拟函数的类称为抽象类,它不能生成对象。抽象类是不完整的,它只能用作基类。

    1. 含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。

    2. 定 义纯虚函数就是为了让基类不可实例化化,因为实例化这样的抽象数据结构本身并没有意义.或者给出实现也没有意义。定义纯虚函数的一般形式为:

    class 类名{
    virtual 返回值类型函数名(参数表)= 0; // 后面的"= 0"是必须的,否则,就成虚函数了
    };
    

    纯虚函数是一个在基类中说明的虚函数,它在基类中没有定义,要求任何派生类都定义自己的版本。纯虚函数为各派生类提供一个公共界面。从基类继承来的纯虚函数,在派生类中仍是虚函数。

    展开全文
  • 含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。

    什么是纯虚函数?

    含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被实现,那么,它的派生类还是个抽象类。

    含有存虚函数的类也就是抽象类!


    为什么要使用纯虚函数?

    当一个类要用做基类时,且其派生出的子类都有一个共性的成员函数,其中每个子类的函数用法都不一样;那么,就可以把该类定义为纯虚函数,也就是抽象类。定义为纯虚函数后,该类不可以再创建对象!

    例如:
    以一个形状类作为基类,其因为是基类,所以派生出的子类圆,长方形,正方形等会有共性的成员函数,假如该共性的成员函数基类中不实现,那么,就可以把它定义为纯虚函数,则该类就会变成抽象类。

    在这里插入图片描述

    纯虚函数如何定义?

    把虚函数定义好不做任何具体实现

    用法:纯虚函数,使用virtual和 =0

    // 声明为纯虚函数
    virtual float acreage() = 0;
    

    什么时候使用纯虚函数?

    1.某些类,在现实角度和项目实现角度,都不需要实例化(不需要创建它的对象)。
    2.这个类中定义的某些成员函数,只是为了提供一个形式上的接口,准备让子类来做具体的实现。
    3.此时,这个方法,就可以定义为“纯虚函数”, 包含纯虚函数的类,就称为抽象类。


    定义纯虚函数的具体实现

    代码:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    
    class Shape {
    public:
    	Shape(string colour = "白") { this->colour = colour; }
    
    	// 声明为纯虚函数
    	virtual float acreage() = 0;
    private:
    	string colour;	// 颜色
    };
    
    // 因为没有实现acreage()函数,因此,该类依旧是抽象类
    class Circle : public Shape {
    public:
    	Circle(float radius=0.0, string colour="白") : Shape(colour) {
    		this->r = radius;
    	}
    
    private:
    	float r;	// 半径
    };
    
    int main(void) {
    	Shape s;		// 错误,抽象类不能创建对象
    	Circle c;		// 错误,抽象类不能创建对象
    
    	return 0;
    }
    

    由上面可以直到,在Circle类中,因为没有实现从抽象类中继承下来的acreage()纯虚函数,因此,Circle类也是抽象类。

    那要如何修改呢?

    只需要自己实现该纯虚函数后,Circle类就不会变成抽象类了。

    // 实现从基类继承下来的纯虚函数
    virtual float acreage() { return r * r * 3.14; }
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    
    class Shape {
    public:
    	Shape(string colour = "白") { this->colour = colour; }
    
    	// 声明为纯虚函数
    	virtual float acreage() = 0;
    private:
    	string colour;	// 颜色
    };
    
    class Circle : public Shape {
    public:
    	Circle(float radius=0.0, string colour="白") : Shape(colour) {
    		this->r = radius;
    	}
    
    	// 实现从基类继承下来的纯虚函数
    	virtual float acreage() { return r * r * 3.14; }
    
    private:
    	float r;	// 半径
    };
    
    int main(void) {
    	Shape s;		// 错误,抽象类不能创建对象
    	Circle c;		// 可以创建对象
    
    	return 0;
    }
    

    纯虚函数的注意事项:

    父类声明某纯虚函数后,
    那么它的子类,
    1)要么实现这个纯虚函数 (最常见)
    2)要么继续把这个纯虚函数声明为纯虚函数,这个子类也成为抽象类
    3)要么不对这个纯虚函数做任何处理,等效于上一种情况(该方式不推荐)

    展开全文
  • C++:纯虚函数抽象类

    2020-04-04 14:44:59
    纯虚函数(pure virtual function)是指被标明为不具体实现的虚拟成员函数。 它用于这样的情况:定义一个基类时,会遇到无法定义...纯虚函数没有实现部分,不能产生对象,所以含有纯虚函数的类是抽象类。 纯虚函...
  • 含有纯虚函数的例子

    千次阅读 2013-10-26 18:22:17
    class Student//含有纯虚函数的类是抽象类,不能定义对象 { public: Student(int,string,float); virtual void display()const=0;//加了const,display函数包括派生类graduate中的函数皆为纯虚函数,所以graduate...
  • 纯虚函数抽象类

    2021-06-13 19:16:14
    纯虚函数和抽象类 ...抽象类的定义就是,含有纯虚函数的类。纯虚函数跟一般的虚函数有很大不同。我们下面来了解下纯虚函数。 纯虚函数 即使有的虚函数在基类中不需要做任何工作,我们也要写出一个空
  • C++ 纯虚函数抽象类

    2020-04-10 12:32:16
    1、纯虚函数 语法: virtual 返回值类型 函数名 (函数参数) = 0;...含有纯虚函数的类抽象类不能创建对象,因为纯虚函数没有函数体,不是完整的函数,无法调用,也无法为其分配内存空间 抽象类通常作为基...
  • 纯虚函数抽象类

    2019-05-27 21:51:48
    纯虚函数一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本 纯虚函数为各派生类提供一个公共界面... 1,含有纯虚函数的类,称为抽象基类,不可实列化。即不能创建对象,存在 的意义 ...
  • C++纯虚函数、抽象类和接口类 1.纯虚函数:纯虚函数在基类...2.抽象类含有纯虚函数的类叫做抽象类抽象类不能实例化对象)。 3.接口类:一般只含有纯虚函数的类(故接口类属于抽象类)。接口类更多的用来表达一...
  • C++系列(纯虚函数抽象类

    万次阅读 多人点赞 2017-12-18 15:52:57
    一个含有纯虚函数的类抽象类)来说,其无法进行实例化 那么,纯虚函数什么呢??从上面的定义可以看到,纯虚函数就是没有函数体,同时在定义的时候,其函数名后面要加上“= 0”。
  • 抽象类的继承/纯虚函数的实现

    千次阅读 2017-12-14 21:33:05
    纯虚函数是指类似 virtual void Do()=0 的函数,含有纯虚函数的类是抽象类,不能实例化对象,其子类需实现所有纯虚函数方能实例化对象。 以上面向对象的规则读者应该都比较清楚,但有个问题大多数教程都没有信息说明...
  • 纯虚函数_抽象类

    2016-07-22 20:27:00
    解耦合 和 模块的划分 c++没有接口的概念 但可以使用纯虚函数(抽象类)实现接口的功能 纯虚函数和抽象类纯虚函数一个在基类中说明的虚函数,在基类中没有定义,要求...含有纯虚函数的基类 称为抽象类。 cla...
  • 1.纯虚函数 一种特殊的虚函数,它的一般格式如下:  class <类名> { virtual <类型><函数名>...凡是含有纯虚函数的类叫做抽象类。这种类不能声明对象,只是作为基类为派生类服
  • c++纯虚函数抽象类

    2018-07-10 00:01:09
    纯虚函数:一个在基类(注意基类)中说明的虚函数,在... 说明形式/格式:virtual 类型 函数名(参数)=0 //=0不能丢,有这个才算纯虚函数而抽象类就是含有纯虚函数的类就是抽象类,但是抽象类不能实例为对象。...
  • C++基础#9:纯虚函数抽象类的用法

    千次阅读 2009-10-29 21:03:00
    纯虚函数和抽象类: 含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。 定义纯虚函数就是为了让基类不可实例化化,因为实例化这样的抽象数据结构...
  •  含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么它的派生类还是个抽象类。定义纯虚函数就是为了让基类不可实例化化,因为实例化这样的抽象数据结构本
  • 抽象类:含有纯虚函数的类叫做抽象类,若派生类没有重写这一个纯虚函数,那么派生类也是抽象类 父类是形状,子类是正方形,形状中有一个纯虚函数“求面积”,这个纯虚函数在形状类中定义,但是不具体声明,而是...
  • 抽象类:父类只要含有纯虚函数就是抽象类,子类必须重写虚函数,否则也是抽象类。 抽象类无法实例化对象,如下图所示: 子类必须重写虚函数,否则也属于抽象类,也无法实例化对象。 案例(来自黑马老师):...
  •  含有纯虚函数的类是抽象类,不能生成对象,只能派生。他派生的类的纯虚函数没有被改写,那么它的派生类还是个抽象类。定义纯虚函数就是为了让基类不可实例化化,因为实例化这样的抽象数据结构本
  • 1、基本概念  纯虚函数一个在基类中说明的纯虚函数,在基类中没有定义,要求任何派生类都定义自己的版本。...1、含有纯虚函数的类,称为抽象基类,不可实例化。即不能创建对象,存在的意义就是被...
  • 抽象类纯虚函数

    2017-06-29 10:09:53
    纯虚函数一种特殊的虚函数,它的一般格式如下:  class  {  virtual ()=0;  … ... 在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的...凡是含有纯虚函数的类叫做抽象类。这
  • 纯虚函数

    2018-07-04 21:00:00
    含有纯虚函数的类是抽象类,抽象类不能实例化对象。 仅含有纯虚函数的类叫接口类(无成员变量)。 如果某个类的虚函数没有被实现,则该类不能实例化对象。 如果想要派生类实现虚函数,则基类的虚函数置0(此时为...
  • 以下内容源于慕课网的学习...概念:含有纯虚函数的类,叫抽象类。抽象类无法实例化对象。抽象类的子类也可能是抽象类。 (1)只有抽象类的子类把抽象类的纯虚函数都给实现了,才能用子类来实例化对象

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 273
精华内容 109
关键字:

含有纯虚函数的类是抽象类