接口(抽象类)
参学:http://www.runoob.com/cplusplus/cpp-interfaces.html
1.什么是接口?
接口描述了类的行为和功能,而不需要完成类的特定实现。
C++ 接口是使用抽象类来实现的,注意抽象类与数据抽象的区别。
如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。
纯虚函数是通过在声明中使用 “= 0” 来指定的,如下所示:
class Box
{
public:
// 纯虚函数
virtual double getVolume() = 0;
private:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
2.具体代码:
1).面向对象的系统可能会使用一个抽象基类为所有的外部应用程序提供一个适当的、通用的、标准化的接口。然后,派生类通过继承抽象基类,就把所有类似的操作都继承下来。
2).外部应用程序提供的功能(即公有函数)在抽象基类中是以纯虚函数的形式存在的。这些纯虚函数在相应的派生类中被实现。
#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;//35
Tri.setWidth(5);
Tri.setHeight(7);
// 输出对象的面积
cout << "Total Triangle area: " << Tri.getArea() << endl; //17
return 0;
}
/*
从上面的实例中,我们可以看到一个抽象类是如何定义一个接口 getArea(),
两个派生类是如何通过不同的计算面积的算法来实现这个相同的函数。
*/
数据抽象
参学:http://www.runoob.com/cplusplus/cpp-data-abstraction.html
1.数据抽象和数据封装的区别:
1.) 数据抽象是一个把实现细节与相关的数据分离开的概念;
2.) 数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制;
3.)数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息而不呈现细 节。
4.) 数据封装是一种把数据和操作数据的函数捆绑在一起的机制;
2.代码
#include <iostream>
using namespace std;
int main( )
{
cout << "Hello C++" <<endl;
return 0;
}
/*
在这里,您不需要理解 cout 是如何在用户的屏幕上显示文本。
您只需要知道公共接口即可,cout 的底层实现可以自由改变
*/
数据封装
参学:http://www.runoob.com/cplusplus/cpp-data-encapsulation.html
1.代码
class Box
{
public:
double getVolume(void)
{
return length * breadth * height;
}
private:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};