if (derivedPtr == nullptr) { std::cout << "dynamic_cast failed" << std::endl;} delete basePtr;return 0;} 在这个例子中,我们创建了一个基类的实例,并尝试将其转换为派生类的指针。由于这个对象实际上是基类的实例,而不是派生类的实例,所以dynamic_cast失败了,并返回了nullptr。在运...
cout << "dynamic_cast failed" << endl; } return 0; } 练习19.5:在什么情况下使用dynamic_cast替代虚函数。 答:我们想使用基类对象的指针或引用执行某个派生类操作并且该操作不是虚函数。 如果我们需要在派生类中增加新的成员函数f,但又无法取得基类的源代码,因而无法在基类中增加相应的虚函数,这时,可以在...
CBasic * pB2 = new CDerived; //dynamic cast failed, so pD1 is null. CDerived * pD1 =dynamic_cast<CDerived * > (pB1); //dynamic cast succeeded, so pD2 points to CDerived object CDerived * pD2 =dynamic_cast<CDerived * > (pB2); //dynamci cast failed, so throw an exception. ...
{ cout << "Derived class" << endl; } }; int main(int argc, char const *argv[]) { // 动态转换 Base* ptr_base = new Derived; Derived* ptr_derived = dynamic_cast<Derived*>(ptr_base); if (ptr_derived) { ptr_derived->print(); } else { cout << "dynamic_cast failed" << ...
//dynamic cast failed, so pD1 is null. CDerived * pD1 = dynamic_cast<CDerived * > (pB1); //dynamic cast succeeded, so pD2 points to CDerived object CDerived * pD2 = dynamic_cast<CDerived * > (pB2); //dynamci cast failed, so throw an exception. ...
{}};classDerived:publicBase{public:voidsomeFunction(){std::cout<<"Derived::someFunction()"<<std::endl;}};intmain(){Base*basePtr=newDerived;Derived*derivedPtr=dynamic_cast<Derived*>(basePtr);if(derivedPtr){derivedPtr->someFunction();}else{std::cout<<"Dynamic cast failed"<<std::endl;}...
{ std::cout << "Derived" << std::endl; } }; int main() { Base* basePtr = new Derived; Derived* derivedPtr = dynamic_cast<Derived*>(basePtr); if (derivedPtr) { derivedPtr->print(); // 输出 "Derived" } else { std::cout << "Failed to cast" << std::endl; } delete ...
convert failed. 最后使用reinterpret_cast试试: 复制代码 intmain(){autopWoman =newWoman(32); (reinterpret_cast<Man*>(pWoman))->howOld(); } 编译后,程序输出如下: 复制代码 I'm 32 now. 从这个例子中,可以看出不同类型转换方式的区别:强制类型转换会尝试不同类型的转换,有时会有潜在的bug. 将类型...
std::cout << "Failed dynamic_cast." << std::endl; } delete base; return 0; } ``` 在上面的示例中,`Derived`类是从`Base`类派生而来的子类。在`main`函数中,首先创建一个指向`Derived`类对象的`Base`类指针`base`,然后将其转换为指向`Derived`类对象的指针`derived`。由于`base`实际上是指向`De...
class Derived : public Base { public: void print() override { std::cout << "Derived\n"; } }; int main() { Base* base = new Derived(); if (Derived* derived = dynamic_cast<Derived*>(base)) { derived->print(); } else { std::cout << "Failed to cast\n"; } delete base; ...