科学网

 找回密码
  注册

tag 标签: 切片

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

让天下没有难灭的火
dfedhw 2016-9-11 13:55
通常情况下,我们所关注的灭火是一种瞬时的状态或行为,也就是说:具体怎样做才能够把火灭掉,相应形成的灭火技术就好比是介入时间轴上的一个“切片”(如 P2 ),然而,这样纯粹注重研究“本体”的出发点可能将灭火技术的发展引入一个误区。 除了完善灭火技术方式的本身,我们更需要重点关注的是:如何确保这块“切片”尽早地“嵌入”时间轴(如 P1 ),以便最快速地切断火焰。用一种简单直白的方式描述如下:假如你在厨房遇到突发火灾,如果能顺手抓起几张湿毛巾覆盖起火点,便可使其熄灭,那么你就用不着还要拿盆 等到 接满水之后泼过去,或是 花时间 四处去找几个灭火器来,依次开启之后喷洒一通。 如果把现有的形形色色的灭火技术(手动或自动)分别看成是位于时间轴上不同点的“切片”,那么,越靠近零点的,并且灭火剂数量又可以随时保证的,便是最高效的技术,至于其本身的技术含量则无足轻重。灭火程序启动得越早,实际操作 方式越简单, 所需灭火剂就越少,灭火也会变得越容易。 灭火非只为“灭火”,实为“止火”, 如何确保各种环境条件下“灭火”行为的尽快实施甚至比“灭火”技术本身的原理构成更为重要 ,让火灾止步于时间轴上具体哪一个点也不重要,重要的是尽量靠近零点的那个区间。最后补充一点:虽然明显“迟钝”的灭火技术会逐渐淡出视野,然而过于“敏感”的技术同样不会招人待见。 消防员拥有蝙蝠的翅膀,在空中灭火救援 1900 年前后,法国艺术家简.马克创作的系列绘画作品 《2000年的法国》,大胆畅想了百年后的未来。 今天要发生的一切,百年前就有人为你画好了
3085 次阅读|0 个评论
[转载]C++:对象切片及拷贝构造函数
why196 2012-10-14 15:09
C++:对象切片及拷贝构造函数 C++提供了继承机制和虚拟,并通过(且只能通过)指向同一类族的指针或者引用来实现多态,否则多态不起作用。原因之一就是这里要说一下的著名的对象切片(Object slicing)问题。 无虚拟机制的继承的切片问题 首先,类中毫无疑问地需要有继承和虚拟。没有这两者,就不存在多态(注意,重载并不属于多态——个人理解,欢迎来搞)。由于虚拟机制的复杂性,先用一个小例子来说明一下只有继承时的切片问题。假定有两个类: class MyBase { public: void Get(){}; void Set(){}; public: int b; }; class DerivedMyBase: public MyBase { public: void Print(){}; void GetD(){}; }; 如果有下面的语句: DerivedMyBase aDMB; MyBase aMB = aDMB; 那么,通过aMB来访问d或者Print()就是非法的: // Illegal to access GetD() or Print() through aMB aMB.GetD(); aMB.Print(); 这是因为在将aDMB拷贝给aMB时发生了对象切片,在aMB对象中只有MyBase的信息,所有的关于DerivedMyBase类的信息都被切片了。在“MyBase aMB = aDMB;”还涉及到默认拷贝构造函数的问题,下文会详细描述。 这仅仅是最简单的一种情况。要注意区分下面这种情况: DerivedMyBase aDMB; MyBase * pMB = aDMB; 通过pMB来访问d或者Print()仍然是非法的: // Illegal to access GetD() or Print() through pMB pMB-GetD(); // Of course one can use dynamic_cast to make this call legal. pMB-Print(); 由于没有虚拟机制,多态在这里仍然不起作用,然而,这里并没有对象切片的发生。因为DerivedMyBase是一个MyBase,所以“MyBase * pMB = aDMB;”是合法的。而pMB仅仅是一个指针,通过该指针引用的是aDMB,但编译器对于该指针应用对象的了解仅限于MyBase,对于DerivedMyBase类的信息一无所知——这也就是在实践中通常将基类作为抽象类来实现多态的原因,此时派生类中的所有不属于基类的信息都无法通过基类指针或引用来获取,因为编译器在解析该指针或引用指向的内存区时是按照基类的信息来解释的。 对象切片的机理 那么,对象切片是如何发生的?简而言之,是由compiler向拷贝构造函数中插入的代码来做。由于在“MyBase aMB = aDMB;”中由编译器生成的拷贝构造函数不需要对虚拟机制进行额外的处理,此时依照bitwise copy,所有属于DerivedMyBase的信息都丢掉了。而在“ MyBase * pMB = aDMB;”中,根本就不需要调用copy ctor,所以切片不会发生。 下面,为MyBase和DerivedMyBase加入虚拟机制,看看情况有什么变化: class MyBase { public: virtual void Get(){}; virtual void Set(){}; public: int b; }; class DerivedMyBase: public MyBase { public: void Print(){}; void GetD(){}; }; 首先编译器会在你的ctor或者编译器为你生成的ctor中加入对虚拟机制的处理代码,这也使得默认拷贝构造函数及对象切片问题变得异常复杂。——此处虚拟机制包括virtual函数和virtual基类。 memberwise copy和bitwise copy 首先说一下深拷贝(memberwise copy)和浅拷贝(bitwise copy)的问题。一般来说,自己定义的copy ctor对于对象的拷贝会有严格的、符合语义的定义(人为错误、破坏因素除外)。然而,无论是自定义的还是默认的ctor,编译器都会插入对虚拟机制的处理代码,这就保证对象切片和拷贝正确的发生——可能会出乎你的意料,但符合C++的语法语义。 虚拟机制与拷贝方式 当类中没有虚拟机制、没有其他类对象的成员时(只包含built-in类型、指针或者数组),默认copy ctor进行的是bitwise copy,这会导致对象切片的发生。然而,当类中有虚拟机制,或者有其他类对象成员时,默认copy ctor采用的是memberwise copy,并且会对虚拟机制进行正确的拷贝。 因为包含虚拟机制的类在定义一个对象时,编译器会向ctor中添加初始化vtable和vbaseclasstable(依赖于具体编译器)的代码,这样可以保证vtable中的内容与类型完全匹配。也就是说MyBase和DerivedMyBase有这相似的VTABLE,但不是完全相同——例如DerivedMyBase中还可以定义自己的virtual函数,这样它的VTABLE就会有更多表项。 而多态的实现是通过将函数调用解析为VTABLE中的偏移量来实现。pMB-Get()可能会被编译器解析成: (*pMB-__vtable )(); 而当MyBase作为虚基类时,访问其中的数据成员可能就是: pMB-__vBaseClassMyBase-b; 那么,当“aMB = aDMB;”,copy ctor会执行memberwise copy,正确的初始化aMB的VTABLE,而不是仅仅将aDMB的VTABLE拷贝过来。如果是bitwise copy,aMB对象中的VTABLE将是aDMB的,aMB.Get()调用的将是DervieMyBase定义的Get(),这显然是不符合语义和逻辑的。 总而言之 对象切片和copy ctor是一个很复杂的东西,在有虚拟机制的情况下两者是紧密结合在一起的。因为对象切片和拷贝构造函数的问题,不通过指针或者引用无法达到多态的目的。 还有一个问题是赋值拷贝的问题,这个机制更复杂,因此Lippman建议不要再虚基类中使用数据成员。C#和java禁止了多重继承,并将interface作为一个单独的东西,消除了赋值拷贝带来的复杂性。关于赋值拷贝的问题,有机会再讨论。 PS:上述代码均能由g++ 3.4.4编译。对于C++的复杂性,想必很多人都有切身感受。 顺祝ChinaUnix的所有朋友们新年快乐,万事大吉,新年发大财! 参考: Inside the C++ Object Model, by Stanley B Lippman. Copyleft (C) 2007-2009 raof01. 本文可以用于除商业外的所有用途。此处“用途”包括(但不限于)拷贝/翻译(部分或全部),不包括根据本文描述来产生代码及思想。若用于非商业,请保留此权利声明,并标明文章原始地址和作者信息;若要用于商业,请与作者联系(raof01@gmail.com),否则作者将使用法律来保证权利。
个人分类: 语言学习|2306 次阅读|0 个评论
[转载]冰冻切片
chengjiny 2011-5-24 22:11
1.动物牺牲前先注入得以安乐死剂量的麻醉药(水合氯醛等) 2.开胸,使用4%PFA灌流(先将针头插入右心室,将左心房剪开) 3.灌流成功肝颜色会由红转白,PFA则会使尸体抖动僵硬 4.取下组织,并浸泡4%PFA 24小时 5.用10%或30%蔗糖脱水 6.使用OCT包埋,并隔着2-甲基丁烷液氮冷冻 7.上机切片10μm方便观察,30μm适合进行confocol z section 8.切完不立即使用,请置入-20°C冰箱,切片要在两周内使用。 附:4%PFA的配制 4%PFA较适于光镜免疫细胞化学研究,最好是动物经灌注固定取材后,继续浸泡固定2~24h。另外,该固定剂较为温和,适于组织标本的较长期保存。 多聚甲醛          40g 0.01M磷酸缓冲液      至1000ml   配制方法:称取40g多聚甲醛,置于三角烧瓶中,加入500~800ml 0.01M磷酸缓冲液(Phosphate Buffer以下简称PB),加热至60℃左右,持续搅拌(或磁力搅拌)使粉末完全溶解,通常需滴加少许1N NaOH才能使溶液清亮,最后补足0.01M的PBS至1000ml,充分混匀。
3106 次阅读|0 个评论
放弃一种,重新选择
热度 1 happycat0924 2010-10-17 20:24
今天虽然是周日,但还是继续昨天下午开始的单纱切片,想增加一些实验的比较。昨天的切片在显微镜下看得还行,今天好像有点故意作对,似乎是切片器被我切得不行,边缘似乎不绝对平了,所以中午就放弃不做了。想还是用液氮冻了做电镜方便省事,而且截面不会像切片那样一不留神就被挤压扁了。但最近电镜那边相当的忙,硕士生等着照片填进大论文,据说送样的时候若是写研三字样的,就优先。等明天再去问问,若是排队什么时候轮到我。其实,除了做截面还想再要搞点理论。不是一般的纠结~
个人分类: 生活点滴|2813 次阅读|1 个评论
小肠PAS染色切片--高手请指点
liudongyang 2009-12-20 15:00
小肠PAS 染色 片子为新生小牛小肠切片,用中性甲醛固定(4%),常规切片,脱蜡至水,用过碘酸氧化10min ,自来水冲洗,再用Shicff染液染色15min,自来水冲洗15min ,苏木素复染5min,流水冲洗9min,常规脱水封片。以前没有做过,对于这个结果不敢肯定,未设对照组又是个失误,请高手指点。 文献称PAS染色主要染糖原,也染中性和酸性的粘性物质(硫酸多糖类?),照片中的肠绒毛横断面有1--3个红色点,推测为杯状细胞分泌糖蛋白染色所致。
个人分类: 科研记录|669 次阅读|0 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-16 15:52

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部