c++ 接口类
什么是接口类?2017-06-07
接口类就是只提供接口不提供实现的类,就是接口类,接口类和抽象类对C++而言,没有什么区别。
接口类有如下特点:
- 子类来实现接口类中没有实现的所有接口。
 - 接口方法前面有virtual关键词修饰,并且等于0。
 - 只能被继承,不能独自生成对象。
 
实现一个动物的接口类例子如下:
#ifndef BASEINTERFACE_H
#define BASEINTERFACE_H
//用于动物的接口类
class BaseInterface{
//是动物都要吃东西,睡觉以及爱好
public:
virtual void Eat()=;
virtual void Sleep()=;
virtual void Hobby()=; virtual ~BaseInterface(){}
}; #endif // BASEINTERFACE_H
人类继承接口类
#ifndef PERSON_H
#define PERSON_H
#include <QString>
#include "baseinterface.h"
//继承动物的接口类
class Person : public BaseInterface
{ public:
Person();
//继承动物接口后一定要实现接口类中的接口
void Eat();
void Sleep();
void Hobby();
//但是人类作为动物有自己的行为和爱好
private:
QString personName;
public:
void Speak();
void SetName(QString pName);
QString GetName();
}; #endif // PERSON_H
人类实现接口类方法:
#include "person.h"
#include <QDebug>
Person::Person()
{
personName = "";
} void Person::Eat(){
qDebug()<<"eat bread";
}
void Person::Sleep(){
qDebug()<<"Sleep 1 hour";
}
void Person::Hobby(){
qDebug()<<"run 35 mins";
}
void Person::Speak(){
qDebug()<<"person speak a lot of language";
}
void Person::SetName(QString pName){
personName = pName;
qDebug()<<personName;
}
QString Person::GetName(){
return personName;
}
更为高级的接口类,后续
2017-06-13 10:16:58
如果多个类同事继承基类,成为子类后,在声明接口类类对象调用虚函数时,怎么判断调用的是哪个子类的虚函数呢?这里要注意以下几点:
- 接口类生命的对象只能是指针类型。
 - 具体调用哪个子类里面父类纯虚函数的实现要取决于接口类中调用纯虚函数的对象指向哪个子类。
 - 可以动态的指定子类
 
#include "dog.h"
#include <QDebug>
Dog::Dog()
{
DogName = "";
} void Dog::Eat(){
qDebug()<<"eat bread";
}
void Dog::Sleep(){
qDebug()<<"Sleep 1 hour";
}
void Dog::Hobby(){
qDebug()<<"run 35 mins";
}
void Dog::Speak(){
qDebug()<<"Dog speak a lot of language";
}
void Dog::SetName(QString pName){
DogName = pName;
qDebug()<<DogName;
}
QString Dog::GetName(){
return DogName;
}
上面又写了一个Dog类。
int main(){
    BaseInterface *pBaseInterface = new Person();
    pBaseInterface->sleep();
    BaseInterface *pBaseInterface1 = new Dog();
    pBaseInterface1->Sleep();
    return ;
}
动态指定子类可以使用类模板,请关注后续
c++ 接口类的更多相关文章
- java基础2.-------interface接口类,实现接口
		
1.为什么使用接口,是把功能方法都写在一个类中,在其他需要调用的时候,通过implements实现该接口 2.接口可以继承多个父类接口,在实现接口的时候,实现类实现所有方法 3.在接口类写方法时,自动 ...
 - PHP中的特殊类,接口类和抽象类(都不能直接实例化)
		
接口类不用实例化,需要一一实现接口定义的所有方法.关键字interface implements 接口interface 是一个规定,给人继承用的东西,有点像抽象类在里面定义的方法,却不去实例化,而需 ...
 - 调用c++接口类
		
调用c++接口类 public class CarDeviceDll { /*对dll库进行一些初始化*/ [DllImport("IDI.dll")] public static ...
 - 无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类  型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5  -0000-0000-C000-000000000046}”的接口的 COM 组件调用   QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来  自 HRESULT:
		
无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -000 ...
 - 类,抽象基类,接口类三者间的区别与联系(C++)
		
结构上的区别: 普通类:数据+方法+实现 抽象类:数据+方法(一定包含虚方法n>=1)+部分方法的实现 接口类:方法(纯虚方法) http://www.cnblogs.com/Tris-wu/p ...
 - PHP接口类interface的正确使用方法
		
对于那些初学PHP语言的人来说,对于PHP的接口类也许了解的还不是很深入,接下来我们就来具体讲述PHP接口类interface的使用方法. 如何正确运用PHP XMLReader解析XML文档 深入解 ...
 - PHP的接口类(interface)和抽象类(abstract)的区别
		
<?php /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么 ...
 - php 抽象类和接口类
		
PHP中抽象类和接口类都是特殊类,通常配合面向对象的多态性一起使用. 相同: ①两者都是抽象类,都不能实例化. ②只有接口类的实现类和抽象类的子类实现了 已经声明的 抽象方法才能被实例化. 不同: ① ...
 - dojo省份地市级联之地市Dao接口类(四)
		
dojo省份地市级联之地市Dao接口类 CityDao.java: /** * 地市 */ package com.you.dao; import java.util.List; import com ...
 - dojo省份地市级联之省份Dao接口类(三)
		
dojo省份地市级联之省份Dao接口类 ProvinceDao.java: /** * 省份-Dao */ package com.you.dao; import java.util.List; im ...
 
随机推荐
- MySQL 5.7 Invalid default value for 'CREATE_TIME'报错的解决方法
			
出处:http://blog.itpub.net/15498/viewspace-2136006/ 由于数据库的升级,今天在执行从MySQL 5.6导出来的SQL文件时报错: mysql> so ...
 - 动态设置所有string字段不分词
			
PUT http://192.168.1.12:9200/test { "settings": { "number_of_shards": 3, &qu ...
 - 阿里云香港B区通过IPV6规避Google验证码
			
最近买了阿里云香港B来FQ,然而被Google的验证码折磨的死去活来.四处查询,终于找到了一个合适的方案. 添加IPV6支持 阿里云香港是没有IPV6地址的,需要一个tunnel,这边使用HE.NET ...
 - GBT27930-2015电动汽车非车载传导式充电机与电池管理系统之间的通信协议
			
本标准规定了电动汽车非车载传导式充电机(简称充电机)与电池管理系统(Battery Management System,简称BMS)之间基于控制器局域网(Control Area NetWork,简称 ...
 - ipconfig/all详解
			
Ipconfig/all(win+R-->cmd-->ipconfig/all)最常用的就是显示自己主机的ip了,可以让我们了解自己的计算机是否成功的租用到一个IP地址.但是ipconfi ...
 - VMware中四种网络连接模式的区别
			
安装好VMwareWorkstations之后,进行虚拟机网络配置时有四种网络连接方式,桥接.仅主机.NAT.LAN区段. 之所以有不同的模式,在我看来是为了满足不同的网络需求,总的来说:桥接.NAT ...
 - mysql备份学习笔记及xtrabackup安装
			
(参考书籍:<深入浅出MySQL>) 一.备份恢复策略 a) 确定要备份的表的存储引擎是事务型还是非事务型 b) 确定使用全备份还是增量备份 c) 定期做备份 ...
 - ASP.NET MVC如何在Action中返回脚本并执行
			
我们都知道在aspx页面的cs文件中只要用Respos.Write("<script></scritp>")就可以在前台执行脚本 但是在MVC中就不一样了, ...
 - Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs
			
ylbtech-Java-Runoob-高级教程-实例-方法:15. Java 实例 – 重载(overloading)方法中使用 Varargs 1.返回顶部 1. Java 实例 - 重载(ove ...
 - 制作OpenStack云平台centos6.5镜像
			
创建虚拟镜像 # qemu-img create -f raw Cloud_Centos6.5_64bit.img 10G [root@localhost ~]# ll /opt/CentOS-6.5 ...