【发布时间】:2013-02-09 02:35:44
【问题描述】:
在阅读 Essential c++ 第 5.10 章运行时类型识别时,我遇到了一个问题。我先介绍一下背景。有一个名为num_sequence 的基类和一个派生自num_sequence 的类Fibonacci。在基类中,有一个名为gen_elems 的虚函数,派生类有自己的定义。
以下内容来自本书。
Fibonacci fib;
num_sequence *ps = &fib;
ps->gen_elems(64);
我们知道 gen_elems() 的斐波那契实例将被调用。 然而,尽管我们从这个测试中知道 ps 解决了斐波那契 类对象,尝试调用 Fibonacci 实例 gen_elems() 直接通过 ps 会导致编译时错误:
ps->斐波那契::gen_elems(64); //给出编译时错误
ps 不知道它所寻址的对象的类型,即使我们和 typeid 和虚函数机制知道。
要调用 gen_elems() 的 Fibonacci 实例,我们必须指示编译器将
ps转换为 Fibonacci 类型的指针。 static_cast 和 dynamic_cast 都可以完成这项工作。
我被粗体字弄糊涂了。 ps->gen_elems(64) 实际上调用了gen_elems() 的斐波那契实例。为什么需要使用 static_cast 和 dynamic_cast 将其转换为斐波那契类型的指针?
【问题讨论】:
标签: c++ dynamic-cast static-cast