C++抽象编程——面向对象(3)——类与接口
来源:互联网 发布:易族智汇 b2b2c 源码 编辑:程序博客网 时间:2024/05/29 17:16
将接口与实现分离
我们上篇讲的Point类仅在单个源文件的上下文中完全使用该类时才有用(也就是说在其他app中它是不能被使用的)。所以通常在库中导出类定义通常更有用,从而使这些定义可用于更广泛的应用程序。在这种情况下,我们要做的是创建一个point.h文件,作为类的接口和一个单独的point.cpp文件,其中包含相应的实现。
从前面的接口系列可以看出,接口通常仅包含其函数的原型,而不是完整的实现。类中的方法也是如此。 界面中的类定义仅包括方法原型,而将这些方法的代码放到实现的cpp中。 因此,头文件看起来与看到的其他库的头文件类似,(除了原型出现在类定义中)。然而,实现文件的结构有些不同。
在C++中,将类的接口与其实现分开时,类定义本身只存在于.h文件中。相应的代码作为独立的方法定义出现在.cpp文件中,它们不是以原型的方式嵌套在类定义中。因此,方法定义需要以不同的方式指定它们所属的类。
在C++中,这个标识是通过在类名之前添加类名作为限定词来实现的,用两个冒号分隔两个名字。因此,Point类中的getX方法的完全限定名称是Point :: getX。
下面的代码为 Point类提供了一个完整的接口:
头文件
Point.h
#ifndef _Point_h#define _Point_h#include <string>class Point { public:/**构造函数: Point();*用法:Point p * Point pt(xc,yc)* ------------------------*创建一个Point类的对象,默认构造函数将默认初始的坐标为(0,0)*第二种形式是用户自行确定x,y的取值*/ Point(); Point(int xc, int yc);/**方法:getX,getY *用法: int x = pt.getX()* int y = pt.getY()*------------------------*用途: 返回Point类中的,x 与 y的值*/ int getX(); int getY();/**方法:toString*用法:string str = pt.tostring()*------------------------*用途: 以“(x,y)”形式返回Point的字符串表示形式。*/ std::string toString();private: int x; int y;};#endif
相对应的实现如下:
实现文件
Point.cpp
#include <string>#include "Point.h"#include "strlib.h"using namespace std;Point::Point(){ x = 0; y = 0;}Point::Point(int xc, int yc) { x = xc; y = yc;}int Point::getX(){ return x;}int Point::getY(){ return y;}string Point::toString(){ return "(" + integerToString(x) + "," + integerToString(y) + ")";}
integerToString参考我的博客C++抽象编程——字符串与整数之间的相互转换详解,在这里我直接把它写进来了我的“strlib.h”文件中,我直接导入就好了。关于“strlib.h”文件,可以参考我的文章(内容很丰富):
strlib.h,一些常见的字符串处理函数
虽说到现在为止还挺好。但是point.h文件仍然指定客户端不感兴趣的某些细节。实例变量x和y实际上是实现的一部分,在接口中就可以让每个人看到,即使客户端没有直接访问这些变量。即使这些声明出现在标记为私有的部分,如果客户端根本看不到这些细节,那就更好了。
不幸的是,C++的规则使得从客户端隐藏实例变量的声明变得非常棘手。在语法上,类的公共和私有部分必须包含在类体内。鉴于编译器必须能够看到整个类的定义,因此无法阻止客户端查看私有部分的内容。 即使如此,我们仍然避免将所有信息出现在客户端的脸上。
- C++抽象编程——面向对象(3)——类与接口
- Java面向对象——抽象类与接口
- Java面向对象——抽象类与接口
- java面向对象—抽象类、接口与多继承
- java面向对象—抽象类、接口与多继承
- java面向对象—抽象类、接口与多继承
- java面向对象—抽象类、接口与多继承
- JavaSe ——4、面向对象 (接口与抽象类)
- OOP面向对象——接口&&抽象
- Java面向对象编程(3)--抽象类,接口,final
- Java面向对象编程(3)--抽象类,接口,final
- C++抽象编程——面向对象(2)——结构体与类
- 面向接口设计和编程——(面向对象、面向接口、面向过程、面向实现)
- 面向对象——抽象类和接口
- 黑马程序员——面向对象之抽象类,接口
- 黑马程序员——面向对象(继承、抽象、接口)
- 面向对象(二)—抽象思维中的抽象类,接口
- C#温故而知新学习系列之面向对象编程—接口和抽象类的区别是什么?(十八)
- 1041: 计算t=1+1/2+1/3+...+1/n
- "Done is better than perfect"——不要过分追求完美,即刻开始就是最好的开始
- 自动布局时高度算不准的问题
- 最小生成树之prim算法java代码
- 笑话收藏
- C++抽象编程——面向对象(3)——类与接口
- 关于My97DatePicker时间插件选择周的时间格式
- spring+struts+hibernate联合开发说明
- Angular 服务和自定义服务
- 1042: 计算一个整数N的阶乘
- MySQL优化原理
- angularjs 服务
- [Guava源码日报](11)BiMap
- Hbase的操作