`
rcfalcon
  • 浏览: 228065 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Interface与纯虚函数在设计中的区别

阅读更多

因为之前一直做C++,没有特别研究过Java、C#中的Interface概念。

在看设计模式的时候,也弄得一知半解的。

 

今天在做GDE-X过程中,我想定义一个类似于 c++的纯虚函数的,派生类必须实现的函数。然后我发现在C#中,使用abstract(纯虚函数)和Interface(接口)都可以实现这个概念,于是甚感迷惑,请教了一下同事,终于弄懂了设计上的不同概念。

 

如果光从实现上来说,在C#中纯虚函数和接口实现的功能一样 —— 定义抽象接口,派生类必须实现。

 

不同的概念是,接口是定义一组方法,它比纯虚函数更加抽象,是对于行为的抽象。

即使没有关系的对象也可能具有同样的行为特性,那么将行为抽象到“接口”这个概念中,在设计上将大大增加灵活性。

 

如果拘泥于使用基类的纯虚函数,则会增加设计的复杂性,而且使用起来也不灵活。

那么什么情况下使用纯虚函数呢?

自己总结如下:

1. 确定该行为只被自己的派生类使用,不会其他地方有复用的必要。

2. 不构成“一组”行为,没必要单独抽出去,增加系统的复杂度。

 

所以在设计中如果发现有“一组”纯虚函数,还是单独抽出去构成接口比较好。

 

 

分享到:
评论

相关推荐

    虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析

    在Java中,虽然没有直接的“纯虚函数”概念,但是可以通过接口(interface)来达到类似的效果。接口中的所有方法默认都是抽象的(即没有实现),并且Java强制要求实现接口的所有类都提供这些方法的具体实现。 总结...

    C++接口实现总结

    在C++编程中,接口(Interface)的概念通常与面向对象编程相关,它是定义类或对象行为的一种规范。虽然C++语言本身并没有直接提供接口的概念,但可以通过一些技巧来模拟接口的实现。这篇博客"《C++接口实现总结》...

    C++中的虚函数(virtual function).rar_C++虚函数_虚函数

    除了普通虚函数,C++还支持纯虚函数,通过在函数声明后加上`= 0`来声明。例如: ```cpp class Interface { public: virtual void doSomething() = 0; // 纯虚函数声明 }; ``` 纯虚函数使得一个类成为一个抽象基类...

    howto_implement_interface_interface_use_

    在编程世界中,接口(Interface)是面向对象设计的一个重要概念,它定义了一组方法的规范,但不提供具体的实现。接口的使用是为了解耦系统中的组件,提高代码的可扩展性和可维护性。本篇文章将深入探讨如何在不同...

    c++ 函数指针和回调的使用

    这种技术在很多场景下都非常有用,例如回调函数、事件处理或者设计模式中的策略模式等。下面我们将深入探讨普通函数指针、同一类的成员函数指针以及不同类的成员函数指针的使用。 首先,让我们了解**普通函数指针**...

    C++继承多接口,调用虚函数跳转到错误接口的虚函数的奇怪问题demo

    在C++中,接口通常通过纯虚函数来实现,这些函数没有具体的实现,只定义了函数签名。一个类可以继承多个含有纯虚函数的基类,从而实现多个接口。但是,如果在多继承场景下,不同接口中有相同名称的虚函数,编译器会...

    C++- 抽象类(存虚函数)、接口、多重继承1

    在C++编程语言中,抽象类(Abstract Class)和接口(Interface)是实现多态性和设计灵活性的重要概念,而多重继承则是C++中允许一个类继承多个父类的特性。这些概念在构建复杂软件系统时尤其有用,但也伴随着一些...

    c++接口演示

    在C++编程语言中,接口(Interface)是一个重要的概念,特别是在设计模式和面向对象编程中。接口定义了一组方法的签名,但不提供具体的实现。它们通常用来规范类的行为,确保不同类之间能够以一致的方式进行交互。在...

    C++语言程序设计课件

    6. **抽象类(Abstract Class)与接口(Interface)**:抽象类包含至少一个纯虚函数,不能实例化。它可以作为其他类的基类,提供接口规范。接口在C++中可以通过纯虚函数来模拟。 7. **构造函数与析构函数...

    src_interface_C++_

    标题 "src_interface_C++_" 暗示我们讨论的主题是关于C++编程中的接口设计,尤其是在游戏开发领域的一个实例——"half life 2" 的VGUI(Video Game User Interface)接口。VGUI是一种用于创建游戏内用户界面的技术,...

    C++面向对象程序设计

    2. 接口(Interface):C++中通过纯虚函数实现接口,使得不同类实现相同接口成为可能。 3. 封装容器:STL(Standard Template Library)提供了一系列容器(如vector、list、map等),实现了高效的数据结构和算法。 ...

    deep in BREW’s Interface .pdf

    在BREW中,`CLASS`通常会将`Interface`作为第一个成员变量,以确保`Interface`和`Class`之间的正确转换。例如: ```c++ OBJECT(CMyInterface) { DECLARE_VTBL(IMyInterface) int m_MyData1; int m_MyData2; int...

    C++中抽象类和接口的区别介绍

    在C++中,虽然没有直接的接口关键字,但可以通过纯虚函数的类来模拟接口。接口的目的是为了分离关注点,确保不同类之间通过一致的接口进行通信,而不是依赖于具体的实现细节。在门的例子中,报警和指纹识别功能可以...

    Visual C++ 面向对象与可视化程序设计 pdf

    - 虚函数(`virtual`)和纯虚函数(`= 0`):实现多态性。 - 友元(Friend):允许非成员函数或类访问另一个类的私有或受保护成员。 3. **Visual C++开发环境**: - IDE(Integrated Development Environment)...

    简单解读C++中的虚函数

    `Abstract`类中的`interfaceFunction()`是纯虚函数,因此`Abstract`类是一个抽象类,不能创建其对象。派生类必须提供`interfaceFunction()`的实现,否则也会变成抽象类。 在继承抽象类时,如果派生类没有实现所有的...

    C++基于多态的职工管理系统源码.zip

    7. **接口类(Interface Class)**:在某些情况下,可能不希望基类有任何数据成员,只提供一组纯虚函数,这样的类称为接口类。虽然C++没有内置的接口概念,但可以通过纯虚函数实现类似效果。 8. **运算符重载...

    C++面向对象程序设计课件

    在C++中,多态分为静态多态(函数重载和运算符重载)和动态多态(虚函数和纯虚函数),通过`virtual`关键字实现。 6. **抽象类与接口**:抽象类不能实例化,主要用于定义一个接口,其中包含纯虚函数。接口...

    c++interface and photographic program

    在C++中,接口通常是通过纯虚函数来实现的,这些函数在基类中没有具体实现,子类必须重写它们以提供具体的功能。 "C++图形程序设计"涉及的是如何利用C++语言进行图形界面开发,这通常包括窗口系统、图形绘制、用户...

    08丨理论五:接口vs抽象类的区别?如何用普通的类模拟抽象类和接口?1

    在面向对象编程中,抽象类和接口是两个关键的语法构造,它们在实现面向对象的四大特性——封装、继承、多态和抽象——以及许多设计模式、设计思想和设计原则中起到至关重要的作用。接口主要用来实现抽象和多态性,...

Global site tag (gtag.js) - Google Analytics