静态转换和动态转换返回值

时间:2019-06-19 21:48:28

标签: c++ polymorphism

这一次我有一个简短的问题。

假设我有一个名为Base的类,另一个名为Derived的类是从类Base派生的,另一个名为Young的类是从类{{ 1}}。

现在,我遇到的手册问题之一创建了多个多态变量(指针的静态类型为Derived,动态类型为任何派生类)。

接下来,为我提供了一段代码,以进行分析并尝试预测屏幕上的输出内容。这是代码:

Base

在我看来,这就像您在工作簿中遇到的棘手问题之一。

现在,我不确定#include <iostream> #include <typeinfo> using namespace std; class Base { public: void f() { std::cout << 2 << " "; } virtual void g() { std::cout << 7 << " "; } }; class Derived : public Base { public: void f() { std::cout << 1 << " "; } void g() { std::cout << 3 << " "; } virtual void h() { std::cout << 4 << " "; } }; class Young : public Derived { public: void h() { std::cout << 9 << " "; } }; int main() { Base *a; Derived b; Base *c = new Base; Base *d = new Derived; Derived *e = new Derived; Base *u = new Young; cout << (static_cast<Derived*>(c)==nullptr) << " "; cout << (dynamic_cast<Derived*>(c)==nullptr) << " "; cout << (static_cast<Derived*>(d)==nullptr) << " "; cout << (dynamic_cast<Derived*>(d)==nullptr) << " "; cout << (static_cast<Derived*>(u)==nullptr) << " "; cout << (dynamic_cast<Derived*>(u)==nullptr) << " " << endl; cout << (typeid(*u)==typeid(Base)) << " "; cout << (typeid(*u)==typeid(Derived)) << " "; cout << (typeid(*u)==typeid(Young)) << " " << endl; return 0; } static_cast何时返回空指针,但是我的预测是输出会是

dynamic_cast

因为我的理解是正确的,所以这些输出中的每一个都会检查true true false false true true false false true中变量的动态类型是否与尖括号()中提到的变量的动态类型相同。如果我错了,请纠正我,并告诉我使用<>static_cast有什么区别,以及它们何时返回空指针。

注意:实际输出应为

dynamic_cast

0 个答案:

没有答案