句柄的使用

 
  
#include < iostream >
class Point{
public :
Point():xv(
0 ),yv( 0 ){}
Point(
int a, int b):xv(a), yv(b){}
Point(
const Point & p):xv(p.xv), yv(p.yv){}
int x() const { return xv;}
int y() const { return yv;}
Point
& x( int x){xv = x; return * this ;}
Point
& y( int y){yv = y; return * this ;}
private :
int xv;
int yv;
};
class Point3D: public Point{
public :
Point3D():zv(
0 ){}
private :
int zv;
};

class Handler{
public :
Handler():p(
0 ), use( new int ( 1 )){}
Handler(
const Point & p0):p( new Point(p0)), use( new int ( 1 )){}; // 必须new
Handler( const Handler & i):p(i.p), use(i.use){ ++* use;}
~ Handler(){decr_use();}
Handler
& operator = ( const Handler & );
Point
* operator -> () const { if (p) return p;} // 这里可以是const的,那样的话就不能改变point内的值了
Point & operator * () const { if (p) return * p;}

private :
Point
* p;
int * use;
void decr_use()
{
if ( --* use == 0 ){delete p; delete use;}}

};
/*
Handler::Handler(const Point &point)
{
p = point;
use = 1;
}
*/
Handler
&
Handler::
operator = ( const Handler & h)
{
++* h.use;
decr_use();
p
= h.p;
use
= h.use;
return * this ;
}
main()
{
Point p(
1 , 2 );

Handler h(p);
Point3D p3d;
h
= p3d;
h
-> x( 6 );
h
-> y( 6 );
cout
<< " point x = " << h -> x() << " point y = " << h -> y() << endl;
}

一个简单的句柄例子,注意注释里的几点。

C++语言的一个问题就是不支持使用对象进行面向对象编程,而是必须使用指针和引用。常用的解决方案是句柄和包装。句柄类存储和管理基类的指针,指针指向锁只对象的类型是可以变化的,既可以指向基类也可以指向派生类,用户通过句柄来访问继承层次的操作。句柄带来的好处就是可以获得动态行为,但无需操心指针的管理。

转载于:https://www.cnblogs.com/macula7/archive/2011/02/25/1964851.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值