当前位置: 首页 > news >正文

个人网站需要建站群吗消防工程师证怎么考

个人网站需要建站群吗,消防工程师证怎么考,嘉兴响应式网站,网站多大C中抽象类 1.抽象类概念1.1、抽象类如何使用1.2、抽象类规定 2.抽象类代码示例2.1、抽象类2.2、子类12.3、子类22.4、程序入口 1.抽象类概念 C是一门面向对象的编程语言,而所有的对象都是通过类来描述的,如果一个类没有足够的信息来描述一个具体的对象&…

C++中抽象类

    • 1.抽象类概念
      • 1.1、抽象类如何使用
      • 1.2、抽象类规定
    • 2.抽象类代码示例
      • 2.1、抽象类
      • 2.2、子类1
      • 2.3、子类2
      • 2.4、程序入口

1.抽象类概念

C++是一门面向对象的编程语言,而所有的对象都是通过类来描述的,如果一个类没有足够的信息来描述一个具体的对象,这样的类就是抽象类。换句话说,类是具有相同或相似结构、操作和约束规格的对象组成的结合。而对象是某一类的具体实例化。每一个类都是具有某些共同特征的对象的抽象。
例如,我们可以将所有的图形归为图形类,图形类即为一个抽象类(父类),但是对于具体的图形是三角形、四边形或者其他图形,无法准确描述。但是三角形、四边形等又都是继承于图形类的子类。具体是哪一类四边形又可分为正方形、平行四边形等。
实际开发中,并不需要将父类初始化为对象,需要的是子类对象,图形类(父类)不能抽象出任何一种图形,但子类却可以。
简单说,父类只是给出了一个模糊的概念,定义了方法的名称,以纯虚函数方式展示,却并没有给出方法的实现过程,而具体的实现过程,在继承于父类的子类中又大不相同。

1.1、抽象类如何使用

在使用抽象类之前,需要了解为什么要用它。如果是自己独自开发代码,得明白什么情况下、什么地方需要加抽象类;如果是在其他人开发的基础上进行二次开发,那也得知道别人为什么需要在此处加抽象类,不加行不行。
例如在工业控制中,有A、B两种运动控制轴卡可以选择,两种轴卡可以实现相同的功能,如果机台装的是A轴卡,那就启动A轴卡,如果装的是B轴卡,那就启用B轴卡。但是我的程序只有一套,即需要兼容效果,如果后面还需要采购C、D轴卡呢?这个时候就可以引用抽象类的概念,抽象类中定义基础运动控制方式名称,但是不实现,实现方式在不同轴卡中。在启用前,只需要判断是哪种轴卡,后续的代码实现运动控制过程调用的方法名称一样。避免了代码中大量修改。

1.2、抽象类规定

(1)抽象类只能用作其他类的基类,不能建立抽象类对象。
(2)抽象类不能用作参数类型、函数返回类型或显式转换的类型。
(3)可以定义指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。这一条很有用,用抽象类方法名称去兼容子类。

2.抽象类代码示例

搞清除抽象类概念后,以下通过一个简单例子加深对抽象类的理解,例子代码来源:C++的抽象类详解

2.1、抽象类

定义抽象类IShape,抽象类IShape作为基类:只有头文件,没有实现文件

#ifndef SHAPE_H
#define SHAPE_H#include <string>using  std::string;//interfaceclass IShape
{public:virtual float getArea() = 0; //纯虚函数,获得面积virtual string getName() = 0; //纯虚函数,返回图形的名称
};#endif

2.2、子类1

基于此抽象类的一个子类Circle
头文件:

#ifndef CIRCLE_H
#define CIRCLE_H#include"IShape.h"class CCircle : public IShape //公有继承自IShape类{public:CCircle(float radius); //构造函数public:virtual float getArea(); //实现声明实现两个基类的函数,声明的时候需要加virtual关键字,实现的时候就不需要加virtual关键字了。virtual string getName();private:float m_fRadius; //派生类可以拥有自己的成员};#endif

cpp实现文件

#include"Circle.h"CCircle::CCircle(float radius):m_fRadius(radius) //使用构造函数的初始化列表初始化
{}string CCircle::getName()
{return "CCircle";
}float CCircle::getArea()  //实现两个基类的函数{return 3.14* m_fRadius* m_fRadius;
}

2.3、子类2

基于抽象类的另一个子类:CRect
头文件

#ifndef RECT_H
#define RECT_H#include"IShape.h"class CRect : public IShape
{public:CRect(float nWidth, float nHeight);public:virtual float getArea();virtual string getName();private:float m_fWidth; //矩形类具有自己的两个属性,宽和高float m_fHeight;
};#endif

cpp实现文件

#include"Rect.h"CRect::CRect(float fWidth, float fHeight):m_fWidth(fWidth), m_fHeight(fHeight)
{}float CRect::getArea()
{return m_fWidth * m_fHeight;
}string CRect::getName()
{return "CRect";
}

2.4、程序入口


#include"Rect.h"
#include"Circle.h"using namespace std;int main()
{IShape* pShape = NULL; //定义了一个抽象类的指针,注意抽象类不能定义对象但是可以定义指针pShape = new CCircle(20.2); //基类指针指向派生类的对象cout << pShape->getName() << " " << pShape->getArea() << endl;delete pShape; //释放了CCirle对象所占的内存,但是指针是没有消失的,它现在就是一个野指针,我们在使用之前必须对它赋值pShape = new CRect(20, 10); //基类指针指向派生类的对象cout << pShape->getName() << " " << pShape->getArea() << endl;return 0;
}

上述例子中,定义了一个图形基类IShape,只有头文件,基类中定义两种方法,计算面积和返回图形名称,但并没有给出实现方式,也不知道是什么图形,无法实现。圆形类CCircle和矩形类CRect继承于基类IShape,分别实现了面积的计算与返回图形名称两种方法。
在程序入口,以指针pShape 的方式,指代基类IShape,而基类指针再指向子类。

http://www.yayakq.cn/news/100759/

相关文章:

  • 洛阳网站建设价格建筑网课平台哪个好
  • 专业的营销型网站建设广州网站开发工程师
  • 郑州 外包网站计算机培训机构
  • 网站公司做的网站有最字dede网站wap
  • 平板电脑做网站吗二级学院网站制度建设
  • 专业做旅游网站的公司游戏推广员是做什么的
  • 广州网站建设推广公司惠城网站建设服务
  • 网站前端浏览器兼容如何做陈巴尔虎旗网站建设
  • 国外做电商网站有哪些官网建立
  • 织梦网站地图如何做php学校网站源码
  • dede移动端网站源码网站设计要点 优帮云
  • wordpress只能显示字上海市网站seo
  • 精品网站建设费用 尖端磐石网络h5制作官网登录
  • 网站建设上的新闻建设企业银行登录
  • 网站编辑兼职网站建设岗位
  • 装修设计网站排名在线课程设计
  • 网站收录500多页官网设计公司
  • 如何规避电子政务门户网站建设photoshop网站视觉设计步骤
  • 河南建设工程信息网下载秦皇岛哪有网站优化公司
  • 怎么做网站推广和宣传一般网站建设公司有哪些
  • 地方门户网站的推广普通话手抄报简单又漂亮
  • 圣亚科技网站案例wordpress mysql8.0
  • 中兴建设云南有限公司网站公司注册网站需要提供什么文件
  • 论坛网站模wordpress异步上传图片
  • 搭建视频播放网站小程序发布流程在哪里
  • 做购物网站 国外服务器建站好用的软件
  • 开发区全力做好网站建设江苏网站关键词优化优化
  • 南京模板建站哪家好如何做一个网站推广自己的产品
  • 中恒建设职业技术培训学校网站怎样创建自己的公众号
  • 公司做网站推广需要多少钱惠东做网站