设为首页 加入收藏

TOP

Effective C++ 34(二)
2015-07-20 17:32:03 来源: 作者: 【 】 浏览:5
Tags:Effective
ss ClassA;//只声明,在接口中只要知道有这些类,而在实现中才去include这些头文件 class ClassB; class ClassD{ public: virtual ~ClassD(){} virtual int getA() const = 0;//函数来返回实现类中的数据成员 virtual double getB() const = 0; virtual double getD() const = 0; static ClassD* makeClassD(const ClassA& xa,const ClassB& xb);//这里使用静态成员来返回 }; 再写一个派生类来实现CLassD的功能,RealClassD.h:

#include "ClassA.h"
#include "ClassB.h"
#include "ClassD.h"

class RealClassD:public ClassD{
public:
	RealClassD(const ClassA& xa,const ClassB& xb):A(xa),B(xb),D(B.getB() + A.getA()){}
	virtual ~RealClassD(){}
	 int getA() const;
	 double getB() const ;
	 double getD() const;

private:
	ClassA A;
	ClassB B;
	ClassB D;
};
而在这个派生类定义中,顺带实现ClassD中的返回指针的makeClassD的函数。这里:先从协议类中继承接口规范,然后在实现中实现接口中的函数。

#include "RealClassD.h"


int RealClassD::getA() const{
	return A.getA();
}
double RealClassD::getB() const{
	return B.getB();
};
double RealClassD::getD() const{
	return D.getB();	
}
ClassD* ClassD::makeClassD(const ClassA& xa,const ClassB& xb){
	return new RealClassD(xa,xb);
}

而在需要使用的地方,如此调用这个函数来指向需要的接口:

	ClassD* dd = ClassD::makeClassD(a,b);
	cout<
  
   getD()<
   
    dd的指针动态绑定到返回的派生类对象,而在派生类中修改其实现的成员只要重新编译派生类的cpp就行了。
    


句柄类和协议类分离了接口与实现,从而降低了文件间的依赖性,当一定程度上有时间和空间上的消耗。对于一个程序转变为产品时,要用具体的类来取代句柄类和协议类。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇TM1629操作源代码-LED驱动IC 下一篇Leetcode - CopyWithRandomList

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C++ Lambda表达式保 (2025-12-26 05:49:45)
·C++ Lambda表达式的 (2025-12-26 05:49:42)
·深入浅出 C++ Lambda (2025-12-26 05:49:40)
·C语言指针从入门到基 (2025-12-26 05:21:36)
·【C语言指针初阶】C (2025-12-26 05:21:33)