C++中如何实现像Java中接口功能--C++抽象类(纯虚函数,虚函数)
在Java中定义个接口,之后可以定义不同的类来实现接口,如果有个函数的参数为这个接口的话,就可以对各自的类做出不同的响应。
如:
- interface animal
- {
- public void info();
- }
- class dog implements animal
- {
- public void info()
- {
- System.out.println("dog class");
- }
- }
- class cat implements animal
- {
- public void info()
- {
- System.out.println("cat class");
- }
- }
- class func{
- public void act(animal a)
- {
- a.info();
- }
- }
- public class test{
- public static void main(String []args)
- {
- dog d = new dog();
- cat c = new cat();
- func f = new func();
- f.act(d);
- f.act(c);
- }
- }
而在C++中,没有接口的定义,我们可以定义抽象类来实现像Java中的接口功能。
包含纯虚函数的类就是抽象类不能实例化,纯虚函数可以定义为:(本文不考虑函数参数)
virtual type functionname()=0;
如:
- #include <iostream>
- using namespace std;
- class animal
- {
- public:
- virtual void info()=;
- };
- class dog:public animal
- {
- void info()
- {
- cout << "dog class" << endl;
- }
- };
- class cat:public animal
- {
- void info()
- {
- cout << "cat class" << endl;
- }
- };
- void test(animal &a)
- {
- a.info();
- }
- int main()
- {
- dog d;
- cat c;
- test(d);
- test(c);
- return ;
- }
上述程序实现结果与Java中一样。
接口和抽象类都不能实例化,但是在C++中如果在类中只是声明为虚函数,还是可以进行实例化的,不严格地说,也是可以当做接口来用。
虚函数定义为:
virtual type functionname(){/*函数体定义*/}
- #include <iostream>
- using namespace std;
- class animal{
- public:
- virtual void info(){
- cout<<"animal class."<<endl;
- }
- };
- class dog:public animal{
- public:
- void info(){
- cout<<"dog class."<<endl;
- }
- };
- class cat:public animal{
- public:
- void info(){
- cout<<"cat class."<<endl;
- }
- };
- void test(animal& a)
- {
- a.info();
- }
- int main()
- {
- animal a;
- dog d;
- cat c;
- test(a);
- test(d);
- test(c);
- return ;
- }
在C++中定义虚函数是在函数前加个virtual关键字,上面例子的结果为:
如果在基类(animal)函数中没有加virtual关键字的话,就会输出:
ps:看了很多东西,试着写点博客,欢迎批评指正,多给点建议。
C++中如何实现像Java中接口功能--C++抽象类(纯虚函数,虚函数)的更多相关文章
- 在MySql中如何定义像Java中类型的Boolean类型
在MySql中如何定义像Java中类型的Boolean类型数据..其实,mysql中 是没有直接定义成Boolean这种数据类型.它只能定义成 tinyint(1) ;如果长度是1,tinyint(1 ...
- python 中的sort 和java中的Collections.sort()函数的使用
x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...
- OC中的@interface和java中的区别以及 @implementation @protocol
java 在java中的interface是‘接口’的意思,而java的类声明用class,即接口用interface声明,类是用class声明,是两个独立的部分. 只有在类声明要实现某个接口时, ...
- 【Java】Java中的Collections类——Java中升级版的数据结构【转】
一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数 ...
- [转]JAVA程序执行顺序,你了解了吗:JAVA中执行顺序,JAVA中赋值顺序
本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过. 一.JAVA中执行顺序 静态块 块 构造器 父类构造器 二.JAVA中赋值顺序 静态块直接赋值 块直接赋值 父类继承的属性已赋值 静态变量 ...
- hadoop中Text类 与 java中String类的区别
hadoop 中 的Text类与java中的String类感觉上用法是相似的,但两者在编码格式和访问方式上还是有些差别的,要说明这个问题,首先得了解几个概念: 字符集: 是一个系统支持的所有抽象字符的 ...
- Scala中集合类型与java中集合类型转换
对于java中的集合元素并不能在scala中拿来就用的,需要进行相应的转换. 1. 转换规则如下 从下面可以看出,有些可以相互转换的,有些只能单向转换: scala.collection.Iterab ...
- JNI系列——C文件中的方法调用Java中方法
1.创建xxx.jni包并在该包下实现一些Java的方法,和要调用的本地方法 2.实现MainActivity中的按钮点击事件-即点击按钮调用本地的方法 3.在C文件中的方法中回调Java的方法 3. ...
- C#中的Attribute和Java中的Annotation
在之前的博客中介绍过C#的Attribute(特性),简单的说,特性主要就是利用反射技术,在运行期获取关注类的相关标注信息,然后利用这些标注信息对关注的类进行处理,最近因为工作的原因,需要看一下Jav ...
随机推荐
- split的用法
split用法返回的是数组 使用split('')根据空格返回数组 使用split()返回一个完整的数组 使用split("",3)返回前三项,是单个的字母 不过要注意: 使用sp ...
- AM8后台历史数据手工清理方法
AM8后台历史数据手工清理方法 数据清理目前通过bat脚本将windows任务计划来完成 Bat 路径位置: \ActiveSoft\Am8Svr\STKServer\Data (请根据服务安装 ...
- js获取当前网址Url
js获取当前路径并截取 var str = window.location.href;// str = 'https://localhost:8080/mark' var index = str .l ...
- [JZOJ3303] 【集训队互测2013】城市规划
题目 题目大意 求\(N\)个点的简单无向图的方案数(有编号). 结果对\(1004535809\)取模. 思考历程 感觉这个问题非常经典. 当时想到了一堆式子,但都觉得可能会有重和漏,于是弃掉了-- ...
- 【JZOJ5730】【luoguP2146】【Comet OJC0396】软件包管理器
description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软件包,同时自动解决所有的依赖( ...
- 解析Spring第一天
目的:了解spring框架中的注解 前言:同样是使用idea创建一个普通的maven工程(如何创建一个普通的Maven工程可以参考mybatis入门第一天的详解). 项目结构: 代码编辑: 在项目中引 ...
- 10 行 Python 代码实现模糊查询/智能提示
10 行 Python 代码实现模糊查询/智能提示 1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的 ...
- 编译报错 :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 ...
- Window中在Intellij idea开发时常用快捷键
以下idea中的快捷键是在window 7中确认过,如果快捷键不起作用,可能是该快捷键被其它软件占用,或系统不同导致. 1.Ctrl + Z:撤回代码: 2.Ctrl + Shift + Z:恢复撤回 ...
- 初探JVM总结
什么是JVM Java Virtual Machine(Java虚拟机)的缩写 .本质上是一个程序. java语言运行的平台,是ava跨平台的根本. java默认的三种类加载器 BootStrap C ...