摘要:
dynamic_cast、static_cast、const_cast 和 reinterpret_cast 一、dynamic_cast: 用法: dynamic_cast<type-id> (expression).将expression转化为具有type-id型的指针。type-id必须是一个 指针、引用(一个已经定义的类)或者void指针。如果是个指针,expression也必... 阅读全文
摘要:
RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息。它提供了运行时确定对象类型的方法。本文简略介绍 RTTI 的一些背景知识、描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI;本文还将详细描述两个重要的 RTTI 运算符的使用方法,它们是 typeid 和dynamic_cast。 其实,RTTI... 阅读全文
摘要:
这几天一直在笔试,有人遇到这类题了。翻了翻标准,总结一下:但这种机制和C#略有不同当决定调用哪个函数时,如果是虚函数,那么取决于指针所指向的对象的类型。如果是非虚函数,那么取决于指针的类型ISO/IEC 14882:2003 page 174[Note: the interpretation of the call of a virtual function depends on the type... 阅读全文
摘要:
第7条:要将多态基类的析构函数声明为虚函数现在考虑一个计时器的问题,我们首先创建一个名为TimeKeeper的基类,然后在它的基础上创建各种派生类,从而用不同手段来计时。由于计时有很多方式,所以这样做是值得的:class TimeKeeper {public:TimeKeeper();~TimeKeeper();...};class AtomicClock: public TimeKeeper {... 阅读全文
摘要:
C++类对象内存结构 首先介绍一下C++中有继承关系的类对象内存的布局:在C++中,如果类中有虚函数,那么它就会有一个虚函数表的指针__vfptr,在类对象最开始的内存数据中。之后是类中的成员变量的内存数据。 对于子类,最开始的内存数据记录着父类对象的拷贝(包括父类虚函数表指针和成员变量)。 之后是子类自己的成员变量数据。 对于子类的子类,也是同样的原理。但是无论继承了多少个子类,对象... 阅读全文