2010-11-04 38 views

回答

1

具体到C++,铸造,有时使用这样的:

void TestFunction(BaseClass* base_class_object) 
{ 
    DerivedClass* d = dynamic_cast<DerivedClass*>(base_class_object); 
    d->method(); 
} 

假设BaseClass被声明为多态的(即,它有一个virtual方法),dynamic_cast将正确施放base_class_object如果它指向完整的DerivedClass对象。 IIRC,否则它将返回一个空指针。因此,在运行期间,您可以动态确定一个对象的类型,并在“铸造”的帮助下用它做更多的事情。


更新 -

托尼的响应,并阿尔斯的评论,既很好地补充我的回应,并提供一个更全面的了解。

+1

除了上面的内容以专门回答Q,dynamic_cast仅适用于多态类,而static_cast可以适用于非多态类,所以这就是关系。 – 2010-11-04 10:16:09

1

在C++中,对象可以从多个基类继承,在这种情况下,对象内部通常会有一个独立连续的内存区域,它遵循每个基本的内存布局。如果派生对象用作期望基类的函数的参数,则编译器可以轻松地将指针/引用传递给“基类”子组件。 static_cast和dynamic_cast类似地根据转换类型选择要指向的特定部分,尽管dynamic_cast进一步执行并对cast的有效性执行有限的运行时验证,如果给定指向不同的指针返回0所派生的类。 reinterpret强制类型在给定指向派生对象的指针时没有任何特殊的支持来查找特定的基础对象,并且不会调整或验证指针。总而言之,可以肯定地说C++的一些Cast和多态特性需要协同工作。