什么是接口类?2017-06-07

接口类就是只提供接口不提供实现的类,就是接口类,接口类和抽象类对C++而言,没有什么区别。

接口类有如下特点:

  1. 子类来实现接口类中没有实现的所有接口。
  2. 接口方法前面有virtual关键词修饰,并且等于0。
  3. 只能被继承,不能独自生成对象。

实现一个动物的接口类例子如下:

#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

如果多个类同事继承基类,成为子类后,在声明接口类类对象调用虚函数时,怎么判断调用的是哪个子类的虚函数呢?这里要注意以下几点:

  1. 接口类生命的对象只能是指针类型。
  2. 具体调用哪个子类里面父类纯虚函数的实现要取决于接口类中调用纯虚函数的对象指向哪个子类。
  3. 可以动态的指定子类
#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++ 接口类的更多相关文章

  1. java基础2.-------interface接口类,实现接口

    1.为什么使用接口,是把功能方法都写在一个类中,在其他需要调用的时候,通过implements实现该接口 2.接口可以继承多个父类接口,在实现接口的时候,实现类实现所有方法 3.在接口类写方法时,自动 ...

  2. PHP中的特殊类,接口类和抽象类(都不能直接实例化)

    接口类不用实例化,需要一一实现接口定义的所有方法.关键字interface implements 接口interface 是一个规定,给人继承用的东西,有点像抽象类在里面定义的方法,却不去实例化,而需 ...

  3. 调用c++接口类

    调用c++接口类 public class CarDeviceDll { /*对dll库进行一些初始化*/ [DllImport("IDI.dll")] public static ...

  4. 无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:

    无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”.此操作失败的原因是对 IID 为“{000208D5 -000 ...

  5. 类,抽象基类,接口类三者间的区别与联系(C++)

    结构上的区别: 普通类:数据+方法+实现 抽象类:数据+方法(一定包含虚方法n>=1)+部分方法的实现 接口类:方法(纯虚方法) http://www.cnblogs.com/Tris-wu/p ...

  6. PHP接口类interface的正确使用方法

    对于那些初学PHP语言的人来说,对于PHP的接口类也许了解的还不是很深入,接下来我们就来具体讲述PHP接口类interface的使用方法. 如何正确运用PHP XMLReader解析XML文档 深入解 ...

  7. PHP的接口类(interface)和抽象类(abstract)的区别

    <?php /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么 ...

  8. php 抽象类和接口类

    PHP中抽象类和接口类都是特殊类,通常配合面向对象的多态性一起使用. 相同: ①两者都是抽象类,都不能实例化. ②只有接口类的实现类和抽象类的子类实现了 已经声明的 抽象方法才能被实例化. 不同: ① ...

  9. dojo省份地市级联之地市Dao接口类(四)

    dojo省份地市级联之地市Dao接口类 CityDao.java: /** * 地市 */ package com.you.dao; import java.util.List; import com ...

  10. dojo省份地市级联之省份Dao接口类(三)

    dojo省份地市级联之省份Dao接口类 ProvinceDao.java: /** * 省份-Dao */ package com.you.dao; import java.util.List; im ...

随机推荐

  1. SpringBoot+Maven 多模块项目的构建、运行、打包

    SpringBoot+Maven 多模块项目的构建.运行.打包 https://blog.csdn.net/zekeTao/article/details/79413919

  2. jQuery 常用操作

    jQuery操作: 不像dom是通过等号赋值,它是传递参数 $('#tb:checkbox').prop('checked'); 获取值 $('#tb:checkbox').prop('checked ...

  3. kali 安装qq

    使用的是longene TM2013 下载地址(百度云):http://pan.baidu.com/s/1dFx8azv 安装: 64位的需要安装32位依赖文件 用这条命令 apt-get insta ...

  4. servet概述

    1定义 Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层. 使用 Servl ...

  5. TensorFlow:tf.nn.max_pool实现池化操作

    tf.nn.max_pool(value, ksize, strides, padding, name=None) 参数是四个,和卷积很类似: 第一个参数value:需要池化的输入,一般池化层接在卷积 ...

  6. Myeclipse 2017安装

    一.下载 Myeclipse官网下载地址:http://www.myeclipsecn.com/download/ 二.安装 安装详细步骤省略,仅仅是一路下一步即可,博主默认安装到了C盘,注意:安装完 ...

  7. 安装使用git

    阿斯蒂芬 http://www.cnblogs.com/alex3714/articles/5930846.html

  8. 寻找数组中第K大的数

    给定一个数组A,要求找到数组A中第K大的数字.对于这个问题,解决方案有不少,此处我只给出三种: 方法1: 对数组A进行排序,然后遍历一遍就可以找到第K大的数字.该方法的时间复杂度为O(N*logN) ...

  9. LeetCode——4. Median of Two Sorted Arrays

    一.题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays 二.题目大意: 给定两个排序过的数组,求出两个数组的中位数,要求时间复 ...

  10. redis 主从复制 [转]

    一.Redis的Replication: 这里首先需要说明的是,在Redis中配置Master-Slave模式真是太简单了.相信在阅读完这篇Blog之后你也可以轻松做到.这里我们还是先列出一些理论性的 ...