继承和虚函数在NS2中的应用(更好地理解累的继承)
来源:互联网 发布:英雄联盟关注软件 编辑:程序博客网 时间:2024/05/21 10:35
派生类继承基类中除构造和析构函数以外的所有成员。
class A { public: virtual void foo() { cout<<"A::foo() is called"<<endl; } }; class B : public A { public: void foo() { cout<<"B::foo() is called"<<endl; } }; int main(void) { A *a = new B(); a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的! 基类的指针调用子类的foo函数 return 0; }
NS2中的虚函数:
class UWALOHA: public UnderwaterMac{public:UWALOHA();int command(int argc, const char*const* argv);void TxProcess(Packet* pkt);void RecvProcess(Packet* pkt);......}
class UnderwaterMac: public Mac {public:UnderwaterMac();double bit_rate_; double encoding_efficiency_; virtual void RecvProcess(Packet*);virtual void TxProcess(Packet*);......}
上面的代码显示:uwaloha 类继承自 underwatermac 类;
如果通信网络使用的是 uwaloha 协议,那么:
1、if(direction == hdr_cmn::DOWN)
(1)如果接收到来自上层的包,需要传往下层时(上层 -> 下层):
会调用uwaloha 的 recv() 函数,但由于uwaloha.cc中没有定义 recv() 函数,而基类 underwatermac 中定义了此函数,因此,会调用underwatermac.cc 中的 recv() 函数。recv() 函数进而调用 TxProcess( )函数。
(2)由于协议使用的是 uwaloha 协议,因此, underwatermac.cc 中的 recv() 函数会调用派生类 uwaloha中的 TxProcess( )函数。
(3)因此,TxProcess()函数在基类underwatermac.h中被声明为虚函数,如下所示:
virtual void TxProcess(Packet*);
2、如果接收到来自下层的包,需要传往上层时(下层 -> 上层):
(1)s.schedule(&recv_handler,p,txtime); 会在txtime时间之后(完全接收完包之后),调用recv_handler,
会调用uwaloha 的 recv() 函数,但由于uwaloha.cc中没有定义 recv() 函数,而基类 underwatermac 中定义了此函数,因此,会调用underwatermac.cc 中的 recv() 函数。recv() 函数进而调用 RecvProcess( )函数。
(2)由于协议使用的是 uwaloha 协议,因此, underwatermac.cc 中的 recv() 函数会调用派生类 uwaloha中的 RecvProcess( )函数。
(3)因此,RecvProcess()函数在基类underwatermac.h中被声明为虚函数,如下所示:
virtual void RecvProcess(Packet*);
- 继承和虚函数在NS2中的应用(更好地理解累的继承)
- 理清javascript中prototype、__proto__、Object、Function的关系,更好地理解原型继承
- 对虚函数和虚继承的理解
- 理解虚拟函数、多继承、虚继承和RTTI所需的代价
- 理解继承(二):构造函数的继承
- 理解继承(三):非构造函数的继承方法
- 虚函数在类继承中的用法
- c++多重继承和虚继承及虚函数深入理解(转)
- 拷贝构造函数和赋值操作符在继承中的应用
- 关于求虚函数的和虚继承中的大小
- c++中的多重继承和虚函数
- 构造函数和一般成员函数在继承中的区别
- 继承中的构造方法的学习 super在继承中的应用
- C++ 深入理解 虚继承、多重继承和直接继承
- C++ 深入理解 虚继承、多重继承和直接继承
- C++ 深入理解 虚继承、多重继承和直接继承
- C++ 深入理解 虚继承、多重继承和直接继承
- 继承和虚函数
- js中的ajax技术
- json:java对象与json字符串互转、java的list和map各自与json字符串的互转
- 迭代求立方根
- 打开Form时报错 FRM-18108:装载下列对象失败 FRM-10102不能附加PLSQL程序库
- 洛谷OJ 1155 双栈排序(二分图染色)
- 继承和虚函数在NS2中的应用(更好地理解累的继承)
- Attention is all you need 论文记录
- 二叉树 各种算法
- jquery ajax图片上传 springmvc ajaxFileUpload 报这错jQuery.handleError is not a function
- MIME协议分析
- ZCMU—1603
- 优化手机的实用指南
- 前端框架Vue、angular、React的优点和缺点
- VMware下安装centOS6.6