decorator呓语——2

本文探讨了C++中虚函数表(vtable)的概念及其在类继承中的应用。通过具体的代码示例,展示了如何通过基类指针调用派生类的虚函数,并讨论了指向虚函数表的指针在类实例中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们排除使用函数指针地情况。因为它不够对象化,当然也许未来可能需要使用。所以不用忘了这是一种可以使用的方式。

其次我们来思考一下使用编译器为什么我们生成指向vtable地指针。这个东西编译器会为写代码来设定它地值。你想修改它将面临不少问题。 具体可以参考我的blog

C++中默认的(拷贝)构造函数 如何处理类对象中 指向vtable 这4个字节的空间的内容 (2)

http://blog.youkuaiyun.com/zhuixundelang/archive/2006/07/31/1005085.aspx

当然事实上你可以改变它。但是代价是你所不能接受的。除非你 被人拿抢指着你的额头。

好了,现在就只剩下 指向类对象的指针了!!

就是这样。就是它了。在这里我碰到问题了。如果使用指向类对象昂的指针,我们需要考虑到谁来分配空间,

谁来释放空间 。真羡慕java。至少不用考虑这种烦人的问题。

这里我 无法给出答案。因为我也不晓得。你自己看着办吧。

我将试图用我得代码来描述这个东西。但是我也觉得我得代码怪怪的。

#include <iostream>
using namespace std;

class Inteface
{
public:
 virtual void fn()
 {
  cout<<"Inteface::fn"<<endl;
 }
};

class DFI1:public Inteface
{
public:
 void fn()
 {
  cout<< "DFI1:fn/n";
 }
};
class DFI2:public Inteface
{
public:
 void fn()
 {
  cout<< "DFI2:fn/n";
 }
};

class Com:public Inteface
{
public:
 void fn()
 {
  if( pI !=NULL )
   pI->fn();
 }
 Com(Inteface *pi):pI(pi)
 {
 }
 void SetpI(Inteface *pi)
 {
  this->pI = pi;
 }
protected:
 Inteface  *pI;
};

/*

事实上你可以看到很多代码Com是没有数据成员( Inteface  *pI)的,而是只有方法

并且这个方法是重载了Inteface的方法,然后在Com的派生类中加入相应的

数据成员( Inteface  *pI),然后再在子类中重载 Inteface的方法。

不过这里我没有这么做。

注意decorator的 功能是 动态地改变对象地行为 !!

*/
class DFCOM1:public Com
{

};

int main(int argc, char* argv[])
{
 DFI1 df1;
 DFI2 df2;
 Inteface i;
 
 Com c1(&df1);
 c1.fn();

 c1.SetpI(&df2);
 c1.fn();

 c1.SetpI(&i);
 c1.fn();
 return 0;
}

好了。游戏结束了。

也许看到 c1.SetpI(&i);让你觉得不爽。但是这确实可以改变类地行为。

无耻哦我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值