C++中如何定义接口类?

首先给接口类下了定义:接口类应该是只提供方法声明,而自身不提供方法定义的抽象类。接口类自身不能实例化,接口类的方法定义/实现只能由接口类的子类来完成。

而对于C++,其接口类一般具有以下特征:

1.最好不要有成员变量,但可以有静态常量(static const或enum)

2.要有纯虚接口方法

3.要有虚析构函数,并提供默认实现

4.不要声明构造函数

如下就是一个最简单的例子:

#1.

如果成员变量,尤其是可变的成员变量,定义在接口中,等于是把实现细节暴露出来了,不符合接口定义的要求,所以一般不在接口中定义可变的成员变量。

而常量可以定义在接口中,因为有时接口需要返回状态,而这些状态可以定义成常量放在接口中。

#2.

由于不能让接口类自身能够实例化,并且需要子类必须实现接口暴露的方法,所以接口方法都要声明成纯虚函数。

声明成纯虚函数意味着接口类自身不需要提供方法的定义,方法的定义需要由接口类的子类提供,并且接口类自身也因此变成了抽象类而不能被实例化。

#3.

a). 在使用接口类的指针访问接口类的子类的实例时,当对接口类的指针做delete时,如果接口类的析构函数不是虚析构函数的话,将只会调用接口类的析构函数,接口类的子类的析构函数将不会被调用,内存泄露将会产生,所以接口类的析构函数必须定义成虚析构函数。

b). 如果接口类的析构函数不提供默认实现,即如果接口类的析构函数是纯虚析构函数的话,接口类的子类将被迫必须提供析构函数的实现,这样对接口类的子类不友好。

c). 在C++11中也可以用: virtual ~Testable() = default; 替代 virtual ~Testable() {};

#4.

不要显式定义任何的构造函数,但也不要在接口中加入如下代码来禁止生成构造函数:

因为C++的调用机制要求子类的构造函数调用时一定会先调用父类的构造函数,如果禁止生成构造函数,代码编译时会报错。如果程序员不显式的提供构造函数,编译器也会隐式的加上构造函数的,虽然这些构造函数对于接口类来说实际没有什么意义。

C++中如何定义标识接口(marker interface)类?

标识接口是没有任何方法和属性的接口。这种接口在java中出现的较多,比如:java.io.Serializable、java.rmi.Remote、java.util.EventListener、java.util.RandomAccess

实现代码如下:

#5.

只要对纯虚析构函数提供一个默认实现就可以了。这种对纯虚函数提供实现的写法看似很奇怪,但C++的确是支持的。

以上是定义C++接口类的一些重要事项,如果有错误或遗漏,请指正。

最后,如果你想学C/C++可以私信小编“01”获取素材资料以及开发工具和听课权限哦!

接口中定义的成员变量是( )。_C++:如何正确的定义一个接口类相关推荐

  1. JAVA 编写一个员工类,成员变量和成员方法自拟,编写一个测试类

    课后习题练习 3.4 编写程序实现以下功能: (1).员工类(Emploee):c=成员变量包含员工号和员工姓名,成员方法包含构造方法和输出方法(输出员工信息). (2). 部门主管类(Manager ...

  2. Java抽象类和接口中可以有成员变量吗?

    public class AbstractTest {public static void main(String[] args) {CC cc = new CC();System.out.print ...

  3. java什么是局部变量_java局部变量是什么意思?Java中局部变量与成员变量有哪些区别?...

    大家知道Java中的局部变量吗?今天我们要了解的Java的局部变量及它和成员变量的区别,一起来看看吧. 什么是局部变量? 局部变量时就是只有一部分可见的变量,例如定义在方法中的变量,只有这百个方法才能 ...

  4. 接口中定义的成员变量是( )。_抽象与接口

    原文链接:抽象与接口 抽象类 抽象类的定义 Java可以创建一种类专门用来当作父类,这种类称为"抽象类".抽象类的作用有点类似"模板",其目的是要设计者依据它的 ...

  5. python实例变量初始化_Python – 应该在__init__中初始化所有成员变量

    也许这更像是一个样式问题,而不是技术问题,但我有一个带有几个成员变量的python类,我想让它工作,以便在用户首次创建类的实例时初始化一些成员变量(即在__init__函数中)我希望从稍后将调用的成员 ...

  6. 利用反射技术修改类中的字段(成员变量的反射)

    题目:利用反射技术修改类中的字段及成员变量的反射 作者:Vashon 一.首先定义一个类如下: class ReflectPoint {private int x; //私有的public int y ...

  7. java中局部变量和成员变量

    java中局部变量和成员变量 1. 定义的位置不一样 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 2. 作业范围不一样 局部变量:只有方法当中才能使用,出了方法就不能再用 成员变量 ...

  8. [java基础入门]java期末常考题。定义一个父类person,该类中有两个私有的属性姓名name和age,实现两个属性的封装 定义构造等等来初始化成员变量name和age,在定义显示show方法将

    编程要求: 定义一个父类person,该类中有两个私有的属性姓名name和age, 实现两个属性的封装 定义构造等等来初始化成员变量name和age, 在定义显示show方法将姓名和年龄打印出来, 创 ...

  9. 我终于明白了!!!类、成员变量、方法、以及如何定义他们,还有static到底干啥用?

    今天是大年初五呀,迎财神的日子!最近一直都忙着背英语单词,刷韩老师的课程,看<Java疯狂讲义>.看书 最近看了几本关于自我成长不错的书籍,也慢慢摆脱了追求阅读速度的急切心理,有句话感觉说 ...

  10. java变量同名_浅析Java中局部变量与成员变量同名解决技巧

    要想区分这哥俩,首先,我们得知道它们分别是什么.先从成员变量下刀. 成员变量 我们来研究一个事物: 属性:外在特征:例如人的身高,体重 行为:能够做什么:例如人有说话,打球等行为. 而在Java语言中 ...

最新文章

  1. (亲试有效)如何完美更换WordPress网站的域名
  2. 可以从max中导出静态模型并渲染了。
  3. mysql 秒杀 隔离级别_MySQL 四种隔离级别详解,看完吊打面试官
  4. 《统计学习方法》—— 朴素贝叶斯方法、详细推导及其python3实现(一)
  5. create---创建表
  6. 判断拐点的条件_拐点的判断
  7. 计算机中max函数是什么意思,『excel 函数中 min和max函数是怎么用的啊,分别是什么意思?』...
  8. 魔兽世界地图插件制作代码
  9. idea的工具栏显示
  10. 伟大的数学思想家—黎曼
  11. vs2012窗体嵌入表格_2012年电子表格日
  12. IPD解读——市场管理(MM)方法论
  13. 2017北大数学夏令营第一天第二题的解答
  14. 他说他是具有文学气息的工科屌丝男(900字文言文,硕士论文致谢)
  15. 定积分存在定理与原函数存在定理
  16. JVM占用CPU过高或者线程卡死定位
  17. Qt自作聪明对QMutex初始化导致出现问题this application has requested the runtime to terminate it in an unusual way
  18. BUUCTF reverse题目 内涵的软件
  19. 新房装修甲醛超标的危害 专业去除室内甲醛的方法
  20. GrapeCity Documents for Word[GcWord]

热门文章

  1. 词频统计(30 分)(map vector sort)
  2. JAVA--set用法
  3. 【令人头秃的线段树】线段树入门题目详解(代码逐句分析)
  4. readyread信号不触发_什么是示波器的触发,意外发现!
  5. local.china java_java-JDBC无法登录到LocalDB实例,但是在SSMS中,...
  6. cfa考试用计算机,cfa考试一定要用专用计算器么
  7. 怎么新建web程序_前端程序员发展潜力最好,那该怎么学好web前端开发?
  8. 小型的搜索引擎设计_广州网站设计工作室-赛致信息科技
  9. 洛谷P3698 [CQOI2017]小Q的棋盘
  10. 【后台任务】在线程池线程上运行代码(6)