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 ...
随机推荐
- Maven 环境隔离实践
现在将SpringMVC中Maven环境隔离实践总结如下: 1. 在pom中配置 <resources> <resource> <directory>src/mai ...
- itertools.groupby()/itertools.compress() 笔记
关于itertools.groupby() itertools.groupby()就是将相邻的并且相同的键值划分为同一组,相似功能可以看https://docs.python.org/3/librar ...
- slice.indices()/collections.Counter笔记
关于slice.indices() >>> help(slice) Help on class slice in module builtins: class slice(objec ...
- CSS 仿 iOS 系统通知数字样式
/** 仿 iOS 系统通知数字样式 **/ .num_span{ background-color: #f00; background-image: -webkit-linear-gradient( ...
- 时间序列大数据平台建设(Time Series Data,简称TSD)
来源:https://blog.csdn.net/bluishglc/article/details/79277455 引言在大数据的生态系统里,时间序列数据(Time Series Data,简称T ...
- C#中全局处理异常方式
using System; using System.Configuration; using System.Text; using System.Windows.Forms; using ZB.Qu ...
- java取余%练习
package ltb6w1; import java.io.*; public class TestMod { String st; int c; InputStreamReader is=new ...
- ALGO-147_蓝桥杯_算法训练_4-3水仙花数
问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 =^+^+^. 样例输入 一个满足题目要求的输入范例. 例: 无 样例输出 xxx xxx ...
- P1072Hankson的趣味题
传送 这个题一本通上有,但是为了增强我们的创新精神,思维能力balabala,书上的满分程序不全,要优化一下,在此写一下第二种方法 #include<iostream> #include& ...
- vuex状态管理2
在vuex的官网https://vuex.vuejs.org中,提到的核心概念一共有5个,分别是State.Getter.Mutation.Action和Module,在上一篇随笔中,我们主要用到其中 ...