很多时候我们都是基于一些别人写好的库来实现我们的功能,然而有时我们是很有需要修改一些库开发者不期望被修改的代码时.例如:
Class CObject1
{
Friend class object2;
Protected:
Int m_value;
}
Class CObject2
{
Public:
Vitrual Void DoSomething()
{
……
m_obj1.m_value = 1;
……
}
Protected:
CObject1 m_obj1;
}
CObject2,CObject1是导出类。我们期望从CObject2派生一个类Cobject3扩展它的DoSomething功能,将m_obj1.m_value 设成2。
这时可以使用强制友元法解决这种问题: 从CObject1派生一个类Cfriendobject,将Cobject3设置为Cfriendobject的友元类。(不能在Cfriendobject增加虚函数,除非原来CObject1中就有虚函数。目的是要保持CObject1和Cfriendobject的大小一致)
Class Cfriendobject : public CObject1
{
Friend class object3;
}
Class Cobject3 : public CObject2
{
Vitrual Void DoSomething()
{
……
((Cfriendobject&)m_obj1).m_value = 2;
……
}
}