1. 抽象类

 在面向对象编程中,抽象类是一种只能定义类型,不能生成对象的类,它是对一系列看上去不同,但是本质相同的具体概念的抽象。最典型的的抽象类就是”图形”,三角形、矩形、梯形都是图形,它们都具有边长、面积属性,”图形”类是对这系列的抽象。

 程序设计中,我们可以定义一个表征图形的类,然后具体图形继承该类。图形类,即基类定义如下:

class Shape
{
public:
double area() //求面积
{
//如何求??
}
};

 实际上,只要是具体图形就有面积这个量,但是对”图形”求面积是没有任何意义的,只有在知道具体的图形类型之后才能求面积。所以对”图形”来说,area()函数无法实现,且不可让Shape生成对象(生成对象无意义),这就需要把Shape定义成一个抽象类:把area()函数声明为纯虚函数即可:

virtual double area() = 0;

 总结什么是抽象类:其实,在c++中并没有抽象类的概念,要实现抽象类则需要通过纯虚函数实现。纯虚函数指的是只定义函数原型的成员函数。在c++的类中,只要存在纯虚函数,那么该类就变成抽象类。

 (1) 每个具体图形的求面积算法不一样,所以加上virtual关键字,表明该函数是虚函数,在子类中重写时可以发生多态; 
 (2) 为对Shape类求面积无意义,所以加上”= 0”表明该函数声明为纯虚函数,不需要定义函数体。 
 (3) 抽象类不能生成对象,只能用作父类被继承,子类必须实现纯虚函数的具体功能,在子类中,父类的纯虚函数被实现后就变成虚函数,当然,如果子类没有实现父类的纯虚函数,那么子类也是抽象类一个。

class shape
{
public:
//纯虚函数
virtual double area() = 0; }; //定义圆形类
class circle : public shape
{
private:
int r; public:
circle(int a) : r(a)
{} double area()
{
return r * r * 3.14;
}
}; //定义矩形类
class rectangle : public shape
{
private:
int x;
int y; public:
rectangle(int a, int b) : x(a), y(b)
{} double area()
{
return x * y;
}
}; int main(void)
{
rectangle r(5, 6);
circle c(5); printf("圆形面积为: %.2lf\n", c.area());
printf("矩形面积为: %.2lf\n", r.area()); return 0;
}

 编译运行: 

2. 接口

 理解了什么是抽象类后(类中含有纯虚函数),理解什么是接口就简单了。c++中接口也是一种特殊的类,需要满足: 
 (1) 类中没有定义任何成员变量 
 (2) 类中所有成员函数都是公有且都是纯虚函数

举例:

class deviceOp
{
public:
virtual bool OpenDev() = 0;
virtual void CloseDev() = 0;
virtual bool WriteDev(const char* buf, int len) = 0;
virtual int ReadDev(char* buf, int len) = 0;
};

 接口是一种特殊的抽象类,所以抽象类具有只能被继承不能创建对象的特征它也具备。

原文摘自:https://blog.csdn.net/qq_29344757/article/details/77346934

C++ 抽象类与接口的更多相关文章

  1. 抽象类 VS 接口

    引言 接口和抽象类是面向对象编程(OOP, Object Oriented programming)中两个绕不开的概念,二者相似而又有所不同.接下来,我们来了解二者的概念并比较它们的异同. 什么是抽象 ...

  2. java抽象类和接口

    面向对象设计过程中重要的一点是如何进行抽象,即把"问题空间"中的元素与"方案空间"中的元素建立理想的一对一的映射关系.抽象类和接口便是抽象过程中的产物.     ...

  3. php中抽象类与接口的概念以及区别

    php里面的接口类,抽象类到底有什么用呢? 刚接触php的时候,觉得这个东西没什么用,其实这些东西还是有一定的作用的,下面我就简单的说说. 1.php 接口类:interface 其实他们的作用很简单 ...

  4. Java 抽象类与接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是 Java 语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予 Java 强大的面向对象的能力.他们两者之间对 ...

  5. 浅谈我对C#中抽象类与接口的理解

    C#中的抽象类与接口有些相似,初学者很容易混淆,今天就让我来谈谈对二者的理解. 首先我们得明确二者的含义,分述如下: 如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个 ...

  6. Atitit 深入理解抽象类与接口 attilax总结

    Atitit 深入理解抽象类与接口 attilax总结 1.1. 主要区别接口侧重于动作抽象..抽象类是属性名词抽象..1 1.2. 抽象层次类>>抽象类>>接口1 1.3. ...

  7. luogg_java学习_07_抽象类_接口_多态学习总结

    这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...

  8. PHP中抽象类,接口定义

    这里先介绍接口,因为在我最近看的好几本php工具书中都没有提到抽象类. 本人也觉得,在理解了接口后抽象类也非常好理解. 例子代码随便写了一下.例子代码是很ok的,测试过了不会报错,懒得看代码的筒靴们看 ...

  9. 0026 Java学习笔记-面向对象-抽象类、接口

    抽象方法与抽象类 抽象方法用abstract修饰,没有方法体部分,连花括号都不能有: 抽象方法和抽象类都用abstract修饰 包含抽象方法的类一定是抽象类:但不包含抽象方法的类也可以是抽象类 不能创 ...

  10. Java抽象类与接口的区别

    很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题.本文我们将仔细讨论这些话题. 在讨论它们之间的不同点之前,我们先看看抽象类.接口各自的特性. ...

随机推荐

  1. 7.mongo python 库 pymongo的安装

    1.Python 中如果想要和 MongoDB 进行交互就需要借助于 PyMongo 库,在CMD中使用命令即可[注意此处是pip3,pip无法安装]: pip3 install pymongo 2. ...

  2. Hadoop 集群的三种方式

    1,Local(Standalone) Mode 单机模式 $ mkdir input $ cp etc/hadoop/*.xml input $ bin/hadoop jar share/hadoo ...

  3. tiny6410的启动参数

    bootargs=root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc console=ttySAC0,115200 bootcmd=nand led ...

  4. Kubernetes应用健康检查

    目录贴:Kubernetes学习系列 在实际生产环境中,想要使得开发的应用程序完全没有bug,在任何时候都运行正常,几乎 是不可能的任务.因此,我们需要一套管理系统,来对用户的应用程序执行周期性的健康 ...

  5. <转>jmeter(二十)阶梯式加压测试

    本博客转载自:http://www.cnblogs.com/imyalost/category/846346.html 个人感觉不错,对jmeter讲解非常详细,担心以后找不到了,所以转发出来,留着慢 ...

  6. 盒子布局、标签特性display、浮动、定位position

    盒子模型布局: 盒子模型:每个标签都是一个盒子 盒子在页面显示在大小是:自身宽度+边框+边距(内边框+外边距) 如果一个盒子设置了边框,则边框需要被加两遍.若果设置了边距则内外边距根据设置情况要被加两 ...

  7. javascript监听按键

    document.addEventListener('keydown',test); function test(e){ var x=e.keyCode; if(x == 49){ console.l ...

  8. opencv学习之路(19)、直方图

    一.概述 二.一维灰度直方图 #include "opencv2/opencv.hpp" #include<iostream> using namespace cv; ...

  9. 剑指offer(13)调整数组顺序使奇数位于偶数前面

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目分析 判断是 ...

  10. 【linux下查看文件路径--jdk】

    1.which java 首先输入命令行,查看结果: [root@localhost ~]# which java /usr/bin/java PS:which Java是无法定位到Java的安装路径 ...