一、创建和销毁TclObject

在Otcl脚本中使用new{}和delete{}。举个例子:

set tcp1 [new Agent/TCP]

delete $tcp1

过程new{}的执行过程:

1创建出解释对象

2执行该对象的初始化实例过程init{},并把用户提供的参数传给它。

3在基类SplitObject的初始化实例过程中,通过create-shadow方法创建该对象在C++中的影像对象。

4影像对象的构造函数将被执行,其中会进行一些变量绑定工作。

因此每个解释类都必须在初始化实例过程中调用其父类的初始化实例过程,以便最终执行到基类SplitObject的初始化实例过程去创建影像对象。

创建影像对象的机制只有当用户从解释器中创建对象时才起作用。

二类TclClass

TclClass用来解决create-shadow。从这几基类继承出来的类有两个功能:构造和编译类结构互为镜像的解释类结构以及提供初始化新的TclObject的方法。

每个从TclClass继承出来的类都和编译类结构中的一个TclObecy的子类相关联,并能初始化所关联的新的对象。举个例子比较明了:

类RenoTcpClass。它从类TclClass继承而来,并和类RenoTcpAgent相关联。它将初始化类RenoTcpAgent的新对象。RenoTcpClass定义如下:

static class RenoTcpClass:public TclClass{

public:

RenoTcpClass:TclClass(”Agent/TCP/Reno”){}

TclObject* create (int argc,const char*const* argv){

return (new RenoTcpAgent());

}

}class_reno

方法create用以创建所关联的TclObject子类的实例。其构造函数中通过调用基类的构造函数TclClass(”Agent/TCP/Reno”)指定了其对应的解释类为Agent/TCP/Reno。这就是一种登记工作,以后每当在解释器中创建Agent/TCP/Reno对象时,create-shadow都会调用这个RenoTcpClass类的create函数,从而创建出正确的影像对象。

TclClass的构造函数除了完成这种登记工作外,还起到了声明Otcl类的作用。在此例中TclClass一共声明3个解释类:Agent、Agent/TCP、Agent/TCP/Reno,并定义了它们的继承关系。

变量绑定:当该对象初始化时在编译对象的构造函数中建立的,在对应的解释对象中可以作为一个实例变量来访问。

要在Otcl对象中调用对应的C++对象的方法,是通过command()函数实现。对于每个TclObject,ns都为其Otcl中的解释对象建立一个实例过程cmd{},过程cmd{}调用影像对象的方法command(),并将cmd{}的参数作为参数数组传递给command()方法。

转载于:https://www.cnblogs.com/zhangleiccst/archive/2011/08/28/2156235.html

分裂对象模型和TclCL(2)相关推荐

  1. BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型API范围...

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第9章节--client对象模型和REST APIs概览 client对象模型API范围 本章之前提到过.client对象 ...

  2. C++阶段03笔记02【类和对象(封装、对象的初始化和清理、对象模型和this指针、友元、运算符重载、继承、多态)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 1.内存分区模型 2.引用 3.函数提高 4.类和对象 4.1.封装 4.1.1.封装的意义 --实例1:设计圆类 --实例2: ...

  3. c++学习13 类与对象(二)c++对象模型和this指针和友元

    类和对象 c++对象模型和this指针 成员变量和成员函数分开存储 在c++中类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象 #include<iostream> us ...

  4. 第三层:C++对象模型和this指针

    文章目录 前情回顾 C++对象模型和this指针 类成员变量和类成员函数的储存 this指针 this指针概念 this指针用途 用途1解释 用途2解释 空指针调用成员函数 const修饰的成员变量 ...

  5. 快速带你分清java内存结构,java内存模型,java对象模型和jvm内存结构!

    现如今你是否有这样的感觉,无论生活还是学习,节奏都是非常的快,每天面对海量的知识信息,自己感觉都要hold不住了,每天打开微信公众号,是不是发现有几十条未读,无论是技术文章还是其他类型的文章,我们大多 ...

  6. BOM 浏览器对象模型和DOM 文档对象模型

    浏览器对象模型BOM 1. 浏览器对象模型介绍 BOM(Browser Object Model) 是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型,浏览器对象模型提供了独立于内容的.可 ...

  7. 【C++笔记】对象模型和this指针

    一.成员变量和成员函数分开存储 C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象 空对象也会占用内存 C++编译器会给每个空对象也分配一个字节空间,是为了标志此对象占内存的 ...

  8. 类和对象- C++对象模型和this指针- 成员变量和成员函数分开存储

    成员变量和成员函数分开存储 在C++中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 空对象占用内存空间 class Person {};void test01() {Pers ...

  9. 【C++编程语言】之C++对象模型和this指针

    目录 1.成员变量和成员函数分开存储 2.this指针概念 3.空指针访问成员函数 4.const修饰成员函数 1.成员变量和成员函数分开存储 ​ 在C++中,类内的成员变量和成员函数分开存储,只有非 ...

最新文章

  1. 生成静态文件的新闻系统核心代码
  2. 计算缺失的元素 java_计算包含缺失值的相关系数
  3. Django RestFramework BaseSerializer
  4. 浅析 Bash 中的 {花括号} | Linux 中国
  5. 【EMNLP2020】融合自训练和自监督方法的无监督文本顺滑研究
  6. WinForm中TextBox的几个基本技巧
  7. vscode插件之php插件koroFileHeader(自动生成注释)
  8. 如何将mp4视频格式转换成flv视频
  9. 浅析json_encode
  10. linux 查看服务器防火墙状态,linux防火墙查看状态firewall、iptable
  11. android手机 hdmi,手机的高清输出——MHL和micro HDMI测试
  12. 2022-03-25 Python作业1
  13. 卢松松:寄生式创业更容易成功
  14. 武音硕士研究生《计算机音乐作曲》培训,武汉音乐学院2016年硕士考试《计算机音乐作曲》大纲及参考书目...
  15. 搭建个人网盘-owncloud
  16. picker 监听确定和取消事件
  17. 企业服务总线(ESB)
  18. python中如何求水仙花数_python如何求水仙花数?
  19. 武林秘籍之C语言大法.第二式 语句 带你走向武林之巅
  20. 蔡司介绍了显微镜下的机器学习能力,可对成像样本进行分析

热门文章

  1. 看好某一个机会和项目,拥有或掌握某一个资源要素和自然禀赋,寻找并组合志同道合
  2. 现在很多人都在网上找富业
  3. 如果你现在很穷,很苦,不要苦恼
  4. 我弟弟用管理员身份把我和爸妈的WIFI设置了,现在就他能用网,气不过,有办法让我出口气吗?
  5. Since WWDC released the first developer
  6. Java里optionsMenu.add_android创建optionsmenu的方法
  7. spark在集群上运行
  8. Qt osg QWidget osgViewer::Viewer
  9. OO第三次电梯作业优化
  10. Chemical table CFR500 div2D(并查集)