精华内容
下载资源
问答
  • 抽象类的声明c++
    千次阅读
    2020-11-03 11:27:45

    在c++中含有纯虚函数的类是抽象类,纯虚函数是是在函数的原型后添加=0

    在面向对象的概念中,我们知道所有的对bai象都是通过du类来描绘的,但是反过来却不是这样。zhi并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”。[cpp] view plaincopyprint?virtual void funtion1()=0
    virtual void funtion1()=0。

     

    含有纯虚函数的类就是抽象类,它是一种特殊的类,为一个了类簇提供统一的接口。
    抽象类无法实例化(无法定义一个抽象类的对象),只能通过继承机制,生成抽象类的非抽象派生类,然后再实例化。

    派生类中如果没有实现纯虚函数那么派生类中也就包含了纯虚函数,那派生类也就变成了抽象类,一般情况下要实现的

    更多相关内容
  • 5. C++ 抽象类

    千次阅读 2020-11-29 19:44:10
    C++中,含有纯虚拟函数的类称为抽象类, 它不能生成对象 ;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。 抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当...

    1 简介

    抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
    通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类称为抽象类, 它不能生成对象 ;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。
    抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。----百度百科

    抽象类的主要作用是对多个子类相同部分抽象为一个基类,其中相同的方法或数据在基类定义,如需更改的方法可在基类声明为纯虚函数,子类可自定义纯虚函数功能。可理解为基类定义了类方法规范,具体功能由子类实现。

    2 纯虚函数

    虚函数在《C++多态》已经介绍过。纯虚函数与虚函数的区别在于:纯虚函数没有实际的实现,其只能通过子类实现具体的功能。
    格式:

    virtual <类型><函数名>(<参数表>)=0;
    E.g: virtual void show()=0;

    需要注意的是:

    • 只要包含纯虚函数的基类都称为抽象类,抽象类不可用于直接实例化对象。
    • 子类必须要实现父类的纯虚函数,负责会报错。

    3 实例

    Eg.实现正方形与圆形的面积计算。(多态的例子重新拿来使用)

    #include<iostream>
    
    using namespace std;
    const double PI = 3.14;  
    
    //基类
    class Shape
    {
    public:
        virtual void show() = 0;    //显示各类基本元素 (纯虚函数)
        virtual void showArea() = 0;  //显示面积 (纯虚函数)
        virtual void Caculate() = 0;  //面积算法 (纯虚函数)
        ~Shape(){ }
    };
    //正方形
    class Square : public Shape
    {
    public:
        Square()
        {
            Lenth = 0;
            Width = 0;
        }
        Square(double lenth, double width)
        {
            Lenth = lenth;
            Width = width;
        }
        virtual void show()
        {
            cout << "Lenth:" << Lenth << " Width" << Width << endl;
        }
        virtual void showArea()
        {
            cout << "SquareArea:" << SquareArea << endl;
        }
        virtual void Caculate()
        {
            SquareArea = Lenth * Width;
        }
    private:
        double Lenth;
        double Width;
        double SquareArea;
    };
    
    //圆形
    class Circle : public Shape
    {
    public:
        Circle(){ Radius = 0; }
        Circle(double radius)
        {
            Radius = radius;
        }
        virtual void show()
        {
            cout << "半径:" << Radius << endl;
        }
        virtual void showArea()
        {
            cout << "CircleArea" << CircleArea << endl;
        }
        virtual void Caculate()
        {
            CircleArea = PI * Radius * Radius;
        }
    private:
        double Radius;
        double CircleArea;
    };
    
    
    void print(Shape& sp)
    {
        sp.Caculate();
        sp.show();
        sp.showArea();
    }
    
    
    int main()
    {
        Square sq1(5, 4);
        Circle cr1(7);
        Square sq2;
        print(sq1);
        print(cr1);
        print(sq2);
    
        return 0;
    }

    结果输出:

    Lenth:5 Width4
    SquareArea:20
    半径:7
    CircleArea153.86
    Lenth:0 Width0
    SquareArea:0

    4 总结

    本篇文章主要记录抽象类的概念及具体展现实例,抽象类的作用更类似于对方法接口的规范,即在抽象类中声明需要用到的方法名为纯虚函数,子类编程中就无须重新定义方法名,只需要实现抽象类的纯虚函数即可。
    根据本篇内容,总结一下使用抽象类的注意事项:

    • 包函数纯虚函数的类都称为抽象类。
    • 抽象类不可用于直接定义对象,只能在由实现了纯虚函数的子类定义对象。
    • 继承于抽象类的子类,必须实现抽象类中的纯虚函数。

    如需技术交流和分享,可关注“开源519” 公众号。

    展开全文
  • c++抽象类抽象类指针笔记

    千次阅读 2020-06-20 21:14:47
    抽象类: 不能用来定义对象而只作为一种基本类型用作继承的类,称为抽象类,由于它常用作基类,通常称为抽象基类。凡是包含纯虚函数的类都是抽象基类。因为纯虚函数是不能够被调用的,包含纯虚函数的类是无法建立...

    抽象类:
    不能用来定义对象而只作为一种基本类型用作继承的类,称为抽象类,由于它常用作基类,通常称为抽象基类。凡是包含纯虚函数的类都是抽象基类。因为纯虚函数是不能够被调用的,包含纯虚函数的类是无法建立对象的。
    虽然抽象类不能定义对象,但是可以定义指向抽象类数据的指针变量。
    在这里插入图片描述

    展开全文
  • C++抽象类

    千次阅读 2021-06-09 00:09:18
    概念在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类抽象类往往用来表...

    概念

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

    抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
    通常在编程语句中用 abstract 修饰的类是抽象类。在C++中,含有纯虚拟函数的类(即:包含至少一个纯虚函数的类)称为抽象类,它不能生成对象。派生自抽象类的类必须实现纯虚函数或者它们必须也是抽象类。

    抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。

    抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
    参考来源

    class Account {
    public:
       Account( double d );   
       virtual double GetBalance();   
       virtual void PrintBalance() = 0;   
    private:
        double _balance;
    };
    
    

    此声明与上一个声明的唯一区别是,PrintBalance 是用 pure 说明符 (= 0) 声明的。

    抽象类特点

    1. 抽象类不能直接实例化,并且对抽象类使用 new 运算符会导致编译时错误;

    2. 抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们;

    3. 重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法。

    限制

    • 变量或成员数据

    • 显式转换的类型

    • 自变量类型

    • 显式转换的类型

    • 函数返回类型

    可以为抽象类定义纯虚函数,但是只能通过使用以下语法直接调用:

    抽象类名称::函数名称()

    这有助于设计基类包括纯虚析构函数的类层次结构,因为在销毁对象的过程中始终会调用基类析构函数。请考虑以下示例:

    // 用纯虚函数声明一个抽象基类.
    // deriv_RestrictionsonUsingAbstractClasses.cpp
    class base {
    public:
        base() {}
        virtual ~base()=0;
    };
    
    // Provide a definition for destructor.
    base::~base() {}
    
    class derived:public base {
    public:
        derived() {}
        ~derived(){}
    };
    
    int main() {
        derived *pDerived = new derived;
        delete pDerived;
    }
    
    

    删除 pDerived 指向的对象时,将调用类 derived 的析构函数,然后调用类 base的析构函数。纯虚函数的空实现确保至少函数的某个实现存在。

    在前面的示例中,纯虚函数 base::~base 是从 derived::~derived 隐式调用的。

    也可使用完全限定的成员函数名称显式调用纯虚函数。

    参考链接

    C++接口与抽象类

    接口是一个概念。它在C++中用抽象类来实现,在C#和Java中用interface来实现。

    与抽象类的关系

    • 包含未实现的方法声明;

    • 不能实例化;

    • 派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)。

    与抽象类的区别

    - 抽象类当中可以存在非抽象的方法,可接口不能,且它里面的方法只是一个声明必须用public来修饰没有具体实现的方法。

    • 抽象类是对象的抽象,然而接口是一种行为规范。

    • 抽象类中的成员变量可以被不同的修饰符来修饰,可接口中的成员变量默认的都是静态常量(static final)。

    • 接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法; 而类可以实现无限个接口,但仅能从一个抽象(或任何其他类型)类继承,从抽象类派生的类仍可实现接口,从而得出接口是用来解决多重继承问题的。

    声明:

    本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。

    展开全文
  • C++学习——抽象类

    千次阅读 2022-07-31 16:04:44
    C++抽象类学习
  • 接口 抽象类 C++

    千次阅读 2022-01-09 17:07:54
    包含纯虚函数的类是抽象类抽象类不能定义实例,但可以声明指向实现该抽象类的具体类的指针或引用。 2、虚函数声明如下:virtual ReturnType FunctionName(Parameter); 虚函数必须实现,如果不实现,编译器将报错...
  • C++ 抽象类

    千次阅读 2020-10-01 15:04:00
    C++接口时通过抽象类实现的,设计抽象类的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类本类不能被用于实例化对象,只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。 因此,如果一个...
  • C++抽象类的继承

    2021-10-23 14:55:15
    声明一个Graphics抽象类,类中声明一个getArea(计算面积)的纯虚函数。 声明Circle类,继承自Graphics类,构造函数用半径作为参数,重写虚函数获得面积。 声明Rectangle类,继承自Graphics类,构造函数用两个边长...
  • C++ 接口(抽象类

    2021-01-03 05:25:16
    C++ 接口(抽象类) 接口描述了类的行为和功能,而不需要完成类的特定实现。 C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如果类中至少有一个...
  • C++抽象类和接口类

    2022-01-04 21:47:44
    抽象类与接口类的区别
  • 设计一个抽象类Vehicle,由它派生出类Car和类Truck,类Car包含名称、颜色和载客数三个数据成员,类Truck包含名称、颜色和载重量三个数据成员。使用如下函数测试你的程序:
  • 主要介绍了C++纯虚函数与抽象类的相关资料,帮助大家更好的理解和学习c++,感兴趣的朋友可以了解下
  • C++ 抽象类 (abstract class)

    千次阅读 多人点赞 2021-05-31 12:20:38
    C++ 抽象类 (abstract class). 抽象类是什么, 以及抽象类和具体类的区别.
  • C++抽象类详解

    千次阅读 2020-05-21 09:58:26
    在介绍抽象类之前,我们先介绍一下纯虚函数。 1.纯虚函数 在基类中仅仅给出声明,不对虚函数实现定义,而是在派生类中实现。这个虚函数称为纯虚函数。普通函数如果仅仅给出它的声明而没有实现它的函数体,这是编译...
  • C++ 接口是使用抽象类来实现的 如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类,而可以在类里实例化对象的称为具体类 什么是虚函数呢? 虚函数是在基类中使用关键字virtual声明的函数。在派生...
  • 抽象类,又称抽象基类,是指拥有纯虚函数的类,抽象类只能作为基类,不能构建对象,因为抽象类中的纯虚函数没有函数体 如果在程序中对抽象基类构建对象(实例化),那么则会出现报错,具体为下面的示例: class CB...
  • C++纯虚函数详解 有时在基类中将某一成员函数定为虚函数,并不是基类本身的要求,而是考虑到派生的需要,在基类中预留了一个函数名,具体功能留给派生根据需要去定义。 纯虚函数是在声明虚函数时被“初始化”为0...
  • 包含纯虚函数的只用作基类, 要成为抽象基类, 必须至少包含一个纯虚函数. 纯虚函数: 函数原型中的=0使虚函数称为纯虚函数. 例如下面例子中的Area()方法 class BaseEllipse { private: double x; double y; ...
  • 在多级继承的过程中,出现明明重写了父类的所有纯虚函数,仍然提示子类为抽象类 对比所重写的父类的纯虚函数的声明参数是否一致,保持一致
  • c++抽象类

    千次阅读 多人点赞 2019-04-22 15:36:54
    一、纯虚函数和抽象类 前面我们介绍了什么是虚函数,即在某些方法前加上关键字virtual,表示该方法在子类中会被重写。 在一个虚函数的声明语句的分号前加上 =0,就可以将一个虚函数变成纯虚函数,其中,=0只能出现在...
  • C++学习 十五、类继承(5)抽象类,纯虚函数前言纯虚函数与抽象类 前言 本篇继续类继承,抽象类 如果两个类之间的关系是A is like B,则最好的类设计方法是,将AB共同的部分提取出来作为一个抽象基类。 纯虚函数与...
  • 有时,由于我们不知道实现,因此无法在基类中提供...C++中的纯虚函数(或抽象函数)是虚函数我们可以实现,但是我们必须在派生类中重写该函数,否则派生类也将成为抽象类(有关我们在哪里为此类函数提供实现的更多信
  • c++抽象类 纯虚函数: 1.c++只有抽象类和抽象方法概念,没有接口。 2.其中抽象类不需要任何修饰符,一个类中包含一个或多个纯虚函数,那么该类被称为抽象类,相反,不包含纯虚函数的类称为具体类,也就是说抽象类的...
  • C++中的抽象类以及与虚基类的异同

    千次阅读 2021-02-27 20:49:01
    1.抽象类 要了解抽象类首先需要什么是纯虚函数 1、纯虚函数 纯虚函数是一个在基类中声明的虚函数,它在该基类中没有定义具体的操作内容,要求各派生类根据实际需求定义自己的版本,纯虚函数的声明格式为 virtual ...
  • C++——虚函数与抽象类

    千次阅读 2018-12-28 10:57:37
    虚函数 虚函数:(virtual function)允许函数调用与函数体间的联系在运行时才建立,是实现动态联编的基础。...如果派生中没有重新定义虚函数,基类虚函数充当派生的虚函数。 要由成员函数、指针或引...
  • 抽象方法只能声明抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。虽然不能定义抽象类的实例,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,943
精华内容 40,377
关键字:

抽象类的声明c++

友情链接: OLED20120205.rar