好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C++ 接口(抽象类)

C++ 接口(抽象类)

接口描述了类的行为和功能,而不需要完成类的特定实现。

C++ 接口是使用抽象类来实现的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。

如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使用 "= 0" 来指定的,如下所示:

class Box { public : // 纯虚函数 virtual double getVolume ( ) = 0 ; private : double length ; // 长度 double breadth ; // 宽度 double height ; // 高度 } ;

设计抽象类(通常称为 ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会导致编译错误。

因此,如果一个 ABC 的子类需要被实例化,则必须实现每个纯虚函数,这也意味着 C++ 支持使用 ABC 声明接口。如果没有在派生类中重写纯虚函数,就尝试实例化该类的对象,会导致编译错误。

可用于实例化对象的类被称为具体类

抽象类的实例

请看下面的实例,基类 Shape 提供了一个接口 getArea(),在两个派生类 Rectangle 和 Triangle 中分别实现了 getArea()

实例

#include < iostream > using namespace std ; // 基类 class Shape { public : // 提供接口框架的纯虚函数 virtual int getArea ( ) = 0 ; void setWidth ( int w ) { width = w ; } void setHeight ( int h ) { height = h ; } protected : int width ; int height ; } ; // 派生类 class Rectangle : public Shape { public : int getArea ( ) { return ( width * height ) ; } } ; class Triangle : public Shape { public : int getArea ( ) { return ( width * height ) / 2 ; } } ; int main ( void ) { Rectangle Rect ; Triangle Tri ; Rect . setWidth ( 5 ) ; Rect . setHeight ( 7 ) ; // 输出对象的面积 cout << " Total Rectangle area: " << Rect . getArea ( ) << endl ; Tri . setWidth ( 5 ) ; Tri . setHeight ( 7 ) ; // 输出对象的面积 cout << " Total Triangle area: " << Tri . getArea ( ) << endl ; return 0 ; }

当上面的代码被编译和执行时,它会产生下列结果:

Total Rectangle area: 35
Total Triangle area: 17

从上面的实例中,我们可以看到一个抽象类是如何定义一个接口 getArea(),两个派生类是如何通过不同的计算面积的算法来实现这个相同的函数。

设计策略

面向对象的系统可能会使用一个抽象基类为所有的外部应用程序提供一个适当的、通用的、标准化的接口。然后,派生类通过继承抽象基类,就把所有类似的操作都继承下来。

外部应用程序提供的功能(即公有函数)在抽象基类中是以纯虚函数的形式存在的。这些纯虚函数在相应的派生类中被实现。

这个架构也使得新的应用程序可以很容易地被添加到系统中,即使是在系统被定义之后依然可以如此。

查看更多关于C++ 接口(抽象类)的详细内容...

  阅读:37次

上一篇

下一篇

第1节:C++ STL 教程    第2节:C++ Web 编程    第3节:C++ 变量作用域    第4节:C++ 变量类型    第5节:C++ 标准库    第6节:C++ 测验    第7节:C++ 存储类    第8节:C++ 函数    第9节:C++ 常量    第10节:C++ 环境设置    第11节:C++ 基本的输入输出    第12节:C++ 动态内存    第13节:C++ 多态    第14节:C++ 多线程    第15节:C++ 教程    第16节:C++ 数字    第17节:C++ 判断    第18节:C++ 数据类型    第19节:C++ 基本语法    第20节:C++ 简介    第21节:C++ 数据结构    第22节:C++ 日期 & 时间    第23节:C++ 命名空间    第24节:C++ 接口(抽象类)    第25节:C++ 数据抽象    第26节:C++ 继承    第27节:C++ 类 & 对象    第28节:C++ 数据封装    第29节:C++ 模板    第30节:C++ 实例    第31节:C++ 字符串    第32节:C++ 数组    第33节:C++ 运算符    第34节:C++ 修饰符类型    第35节:C++ 注释    第36节:C++ 循环    第37节:C++ 指针    第38节:C++ 引用    第39节:C++ 异常处理    第40节:C++ 文件和流    第41节:C++ 重载运算符和重载函数    第42节:C++ 预处理器    第43节:C++ 有用的资源    第44节:C++ 信号处理