【发布时间】:2013-11-09 19:22:08
【问题描述】:
我有两门课:
class MyAbstractClass
{
public:
virtual const std::string& getStr() const =0;
}
class MyRealClass : public MyAbstractClass
{
public:
virtual const std::string& getStr() const { return m_str;};
private:
std::string m_str;
}
我主要有:
MyAbstractClass* ptr = new(MyRealClass("some string"));
我想获取存储在MyRealClass中的字符串信息通过指向基类的指针。
我需要以某种方式将ptr 转换为MyRealClass 以获取信息吗?或者运行时环境会足够聪明地发现我实际上是从MyRealClass 调用getStr?
ptr->getStr();
或其他类似static_cast<MyRealClass*>(ptr)->getStr(); 甚至dynamic_cast<MyRealClass*>(ptr)->getStr(); 的东西?
一般来说,如果我们使用一个指向抽象基类的指针,而不仅仅是一个简单的(真正的)基类,我们真的需要强制转换吗?
【问题讨论】:
-
您尝试过这些替代方案吗?有没有工作?有没有失败?
-
提问前请先编译好你的代码!
-
请注意,您可以删除
new语句中的一半括号,它的含义仍然相同。