C++:接口继承(interface) 和 实现继承(implementation) 详解

继承接口和实现, 主要包含三种方式:

1. 只继承接口, 纯虚函数;

2. 继承接口和实现, 允许覆写(override), 虚函数;

3. 继承接口和实现, 不允许覆写(override), 非虚函数;

1. 纯虚函数:

只继承接口, 但是派生类必须实现其接口;

纯虚函数也可以包含实现, 但是只能在指明类(即, class::)的时候使用

2. 虚函数:

继承接口和实现, 派生类可以覆写(override), 也可以使用默认版本, 即基函数(base)版本;

纯虚函数约束程序更多, 虚函数更灵活;

3. 非虚函数

继承接口和实现, 强制的提供派生类的实现, 不可以改变, 即不可以覆写(override);

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

关于派生类使用纯虚函数的实现, 如下:

/*************************************************
File: pure_virtual.cpp
Copyright: C.L.Wang
Author: C.L.Wang
Date: 2014-04-01
Description: explicit
Email: morndragon@126.com
**************************************************/

/*eclipse cdt, gcc 4.8.1*/

#include <iostream>  

using namespace std;  

class Shape {
public:
    virtual void draw() const;
    virtual void error (const std::string& msg) {std::cout << msg << std::endl;};
    int objectID() const { return 1;};
};  

void Shape::draw() const {
    std::cout << "Shape Draw!" << std::endl;
}  

class Rectangle: public Shape {
public:
    void draw() const {std::cout << "Rect Draw!" << std::endl;};
};
class Ellipse: public Shape {
public:
    void draw() const {std::cout << "Elli Draw!" << std::endl;};
};  

int main () {
    Shape* ps1 = new Rectangle;
    Shape* ps2 = new Ellipse;
    ps1->draw();
    ps2->draw();
    std::cout << "Attention: " << std::endl;
    ps1->Shape::draw();
    ps2->Shape::draw();
    return 0;
}

输出:

Rect Draw!
Elli Draw!
Attention:
Shape Draw!
Shape Draw!

作者:csdn博客 Spike_King

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索继承
, 接口
, 函数
, 版本
, override
, virtual
, http接口c++
, c三种继承方式
, 继承详解
, 纯虚函数
函数继承
fft算法c语言实现详解、c 多继承怎么实现、c语言实现继承和多态、c语言实现继承、mallat算法c实现详解,以便于您获取更多的相关知识。

时间: 2024-08-03 01:14:44

C++:接口继承(interface) 和 实现继承(implementation) 详解的相关文章

C++:通过私有(private)继承复用类实现工厂函数详解

通过接口类(interface class), 实现工厂函数, 可以复用(reuse)已有类, 重写实现接口. 如: 接口类: IPerson; 复用类: PersonInfo; 实现类: CPerson; 工厂函数: DatabaseID askUserForDatabaseID(); std::shared_ptr<IPerson> makePerson(DatabaseID personIndetifier); 可以通过私有继承复用类PersonInfo,公有继承接口类IPerson,

继承ViewGroup重写onMeasure方法的详解

我们继承重写ViewGroup的目的是要做自定义控件,所以我们有必要先看一下安卓View的绘制过程: 首先当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree,绘画通过遍历整个树来完成,不可见的区域的View被放弃. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍

jQuery继承extend用法详解_jquery

本文实例为大家jQuery继承extend用法,供大家参考,具体内容如下 js代码 //直接基于jQuery的扩展,判断是否为空 $.isBlank = function(obj){ return(typeof(obj)=='undefined'||obj==''||obj==null); } //直接基于jQuery的扩展,去除html标签,保留内容 $.htmlContent = function(tag){ var reTag = /<(?:.|\s)*?>/g; return tag.

hadoop详解(十) 序列化与Writable接口

简介 序列化和反序列化就是结构化对象和字节流之间的转换,主要用在内部进程的通讯和持久化存储方 面. 通讯格式需求 hadoop在节点间的内部通讯使用的是RPC,RPC协议把消息翻译成二进制字节流发 送到远程节点,远程节点再通过反序列化把二进制流转成原始的信息.RPC的序列化需要实现以下几点: 1. 压缩,可以起到压缩的效果,占用的宽带资源要小. 2.快速,内部进程为分布式系统构建了高速链路,因 此在序列化和反序列化间必须是快速的,不能让传输速度成为瓶颈. 3.可扩展的,新的服务端为新的客户 端增

PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)_php技巧

本文实例讲述了PHP面向对象程序设计高级特性.分享给大家供大家参考,具体如下: 静态属性 <?php class StaticExample { static public $aNum = 0; // 静态共有属性 static public function sayHello() { // 静态共有方法 print "hello"; } } print StaticExample::$aNum; StaticExample::sayHello(); ?> 输出:0   

PHP SPL标准库之接口(Interface)详解

  这篇文章主要介绍了PHP SPL标准库之接口(Interface)详解,本文分别讲解了Coutable接口.OuterIterator接口.RecursiveIterator接口.SeekableIterator接口.SplObserver和SplSubject接口等内容,需要的朋友可以参考下 PHP SPL标准库总共有6个接口,如下: 1.Countable 2.OuterIterator 3.RecursiveIterator 4.SeekableIterator 5.SplObserv

面向对象编程语言中的接口(Interface)

在大多面向对象的编程语言中都提供了Interface(接口)的概念.如果你事先学过这个概念,那么在谈到"接口测试"时,会不会想起这个概念来!?本篇文章简单介绍一下面向对象编程语言中的Interface.     Java中的Interface                                                                   在Java中定义接口使用interface关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不

[Java] 接口(Interface)与 抽象类 (Abstract)使用规则和区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! 目录(?)[+] 接口(Interface) 是抽象方法的集合,接口通常以interface来声明. 一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念. 类描述对象的属性和方法.接口则包含类要实现的方法.  除非实现接口的类是抽象类,否则该类要定义接口中的所有方法. 接口无法被实例化,但是可以被实现.一个实现接口的类,必须实现接口内所描述的所有方法(所有方法都是抽象的方法),否

浅析php接口操作interface关键字的用法及应用实例

接口是一种约束形式,其中只包括成员定义,不包含成员实现的内容.用接口(interface),你可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容. 我们可以通过interface来定义一个接口,就像定义一个标准的类一样,但其中定义所有的方法都是空的. 接口中定义的所有方法都必须是public,这是接口的特性. 实现   要实现一个接口,可以使用implements操作符.类中必须实现接口中定义的所有方法,否则会报一个fatal错误.如果要实现多个接口,可以用逗号来分隔多个接口的名称.