在Java中定义个接口,之后可以定义不同的类来实现接口,如果有个函数的参数为这个接口的话,就可以对各自的类做出不同的响应。

如:

  1. interface animal
  2. {
  3. public void info();
  4. }
  5.  
  6. class dog implements animal
  7. {
  8. public void info()
  9. {
  10. System.out.println("dog class");
  11. }
  12. }
  13.  
  14. class cat implements animal
  15. {
  16. public void info()
  17. {
  18. System.out.println("cat class");
  19. }
  20. }
  21.  
  22. class func{
  23. public void act(animal a)
  24. {
  25. a.info();
  26. }
  27. }
  28. public class test{
  29. public static void main(String []args)
  30. {
  31. dog d = new dog();
  32. cat c = new cat();
  33.  
  34. func f = new func();
  35. f.act(d);
  36. f.act(c);
  37.  
  38. }
  39. }

 而在C++中,没有接口的定义,我们可以定义抽象类来实现像Java中的接口功能。

包含纯虚函数的类就是抽象类不能实例化,纯虚函数可以定义为:(本文不考虑函数参数)

virtual type functionname()=0;

如:

  1. #include <iostream>
  2. using namespace std;
  3. class animal
  4. {
  5. public:
  6. virtual void info()=;
  7. };
  8. class dog:public animal
  9. {
  10. void info()
  11. {
  12. cout << "dog class" << endl;
  13. }
  14. };
  15. class cat:public animal
  16. {
  17. void info()
  18. {
  19. cout << "cat class" << endl;
  20. }
  21. };
  22. void test(animal &a)
  23. {
  24. a.info();
  25. }
  26.  
  27. int main()
  28. {
  29. dog d;
  30. cat c;
  31.  
  32. test(d);
  33. test(c);
  34.  
  35. return ;
  36. }

上述程序实现结果与Java中一样。

接口和抽象类都不能实例化,但是在C++中如果在类中只是声明为虚函数,还是可以进行实例化的,不严格地说,也是可以当做接口来用。

虚函数定义为:

virtual type functionname(){/*函数体定义*/}

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class animal{
  5. public:
  6. virtual void info(){
  7. cout<<"animal class."<<endl;
  8. }
  9. };
  10.  
  11. class dog:public animal{
  12. public:
  13. void info(){
  14. cout<<"dog class."<<endl;
  15. }
  16. };
  17.  
  18. class cat:public animal{
  19. public:
  20. void info(){
  21. cout<<"cat class."<<endl;
  22. }
  23. };
  24.  
  25. void test(animal& a)
  26. {
  27. a.info();
  28. }
  29.  
  30. int main()
  31. {
  32. animal a;
  33. dog d;
  34. cat c;
  35.  
  36. test(a);
  37. test(d);
  38. test(c);
  39.  
  40. return ;
  41. }

在C++中定义虚函数是在函数前加个virtual关键字,上面例子的结果为:

如果在基类(animal)函数中没有加virtual关键字的话,就会输出:

ps:看了很多东西,试着写点博客,欢迎批评指正,多给点建议。

C++中如何实现像Java中接口功能--C++抽象类(纯虚函数,虚函数)的更多相关文章

  1. 在MySql中如何定义像Java中类型的Boolean类型

    在MySql中如何定义像Java中类型的Boolean类型数据..其实,mysql中 是没有直接定义成Boolean这种数据类型.它只能定义成 tinyint(1) ;如果长度是1,tinyint(1 ...

  2. python 中的sort 和java中的Collections.sort()函数的使用

    x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...

  3. OC中的@interface和java中的区别以及 @implementation @protocol

      java 在java中的interface是‘接口’的意思,而java的类声明用class,即接口用interface声明,类是用class声明,是两个独立的部分. 只有在类声明要实现某个接口时, ...

  4. 【Java】Java中的Collections类——Java中升级版的数据结构【转】

    一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数 ...

  5. [转]JAVA程序执行顺序,你了解了吗:JAVA中执行顺序,JAVA中赋值顺序

    本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过. 一.JAVA中执行顺序 静态块 块 构造器 父类构造器 二.JAVA中赋值顺序 静态块直接赋值 块直接赋值 父类继承的属性已赋值 静态变量 ...

  6. hadoop中Text类 与 java中String类的区别

    hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的 ...

  7. Scala中集合类型与java中集合类型转换

    对于java中的集合元素并不能在scala中拿来就用的,需要进行相应的转换. 1. 转换规则如下 从下面可以看出,有些可以相互转换的,有些只能单向转换: scala.collection.Iterab ...

  8. JNI系列——C文件中的方法调用Java中方法

    1.创建xxx.jni包并在该包下实现一些Java的方法,和要调用的本地方法 2.实现MainActivity中的按钮点击事件-即点击按钮调用本地的方法 3.在C文件中的方法中回调Java的方法 3. ...

  9. C#中的Attribute和Java中的Annotation

    在之前的博客中介绍过C#的Attribute(特性),简单的说,特性主要就是利用反射技术,在运行期获取关注类的相关标注信息,然后利用这些标注信息对关注的类进行处理,最近因为工作的原因,需要看一下Jav ...

随机推荐

  1. split的用法

    split用法返回的是数组 使用split('')根据空格返回数组 使用split()返回一个完整的数组 使用split("",3)返回前三项,是单个的字母 不过要注意: 使用sp ...

  2. AM8后台历史数据手工清理方法

    AM8后台历史数据手工清理方法 数据清理目前通过bat脚本将windows任务计划来完成 Bat 路径位置: \ActiveSoft\Am8Svr\STKServer\Data    (请根据服务安装 ...

  3. js获取当前网址Url

    js获取当前路径并截取 var str = window.location.href;// str = 'https://localhost:8080/mark' var index = str .l ...

  4. [JZOJ3303] 【集训队互测2013】城市规划

    题目 题目大意 求\(N\)个点的简单无向图的方案数(有编号). 结果对\(1004535809\)取模. 思考历程 感觉这个问题非常经典. 当时想到了一堆式子,但都觉得可能会有重和漏,于是弃掉了-- ...

  5. 【JZOJ5730】【luoguP2146】【Comet OJC0396】软件包管理器

    description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...

  6. 解析Spring第一天

    目的:了解spring框架中的注解 前言:同样是使用idea创建一个普通的maven工程(如何创建一个普通的Maven工程可以参考mybatis入门第一天的详解). 项目结构: 代码编辑: 在项目中引 ...

  7. 10 行 Python 代码实现模糊查询/智能提示

    10 行 Python 代码实现模糊查询/智能提示   1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的 ...

  8. 编译报错 :The method list(String, Object[]) is ambiguous for the type BaseHibernateDao<M,PK>

    原因:eclipse 的个bug,具体见http://stackoverflow.com/questions/10852923/method-is-ambiguous-for-the-type-but ...

  9. Window中在Intellij idea开发时常用快捷键

    以下idea中的快捷键是在window 7中确认过,如果快捷键不起作用,可能是该快捷键被其它软件占用,或系统不同导致. 1.Ctrl + Z:撤回代码: 2.Ctrl + Shift + Z:恢复撤回 ...

  10. 初探JVM总结

    什么是JVM Java Virtual Machine(Java虚拟机)的缩写 .本质上是一个程序. java语言运行的平台,是ava跨平台的根本. java默认的三种类加载器 BootStrap C ...