这一次我有一个简短的问题。
假设我有一个名为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