作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
<分区>
我不明白为什么会这样。pReallyABase 是一个向下转换的 shared_pointer< Derived >,它指向一个基类实例。
我理解为什么编译器让我调用 pReallyABase->onlyForDerived() 因为我将它定义为派生类指针,但是当我尝试使用该指针调用派生类函数时为什么没有出现运行时错误?
class Base {
public:
virtual string whatAmI() {
return "I am a Base";
}
};
class Derived : public Base {
public:
virtual string whatAmI() {
return "I am a Derived";
}
string onlyForDerived() {
return "I can do Derived things";
}
};
int main(int argc, char *argv[]) {
shared_ptr<Base> pBase = shared_ptr<Base>(new Base);
shared_ptr<Derived> pReallyABase = static_pointer_cast<Derived>(pBase);
cout << pReallyABase->whatAmI() << endl;
cout << pReallyABase->onlyForDerived() << endl; //Why does this work?
return 0;
}
I am a Base
I can do Derived things
这个问题在这里已经有了答案: Downcasting using the 'static_cast' in C++ (3 个答案) 关闭 8 年前。 我不明白为什么会这样。pReallyABase
我是一名优秀的程序员,十分优秀!