У меня есть 2 классов:указатель на абстрактный базовый класс нужно бросить? C++
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
, чтобы получить информацию? или среда выполнения будет достаточно умна, чтобы понять, что я на самом деле звоню getStr
от MyRealClass
?
ptr->getStr();
или еще что-то вроде static_cast<MyRealClass*>(ptr)->getStr();
или даже dynamic_cast<MyRealClass*>(ptr)->getStr();
?
В общем, действительно ли нам нужно использовать, если мы используем указатель на базовый класс Abstract, а не только на простой (реальный) базовый класс?
Вы пробовали какие-либо из этих альтернатив? Была ли какая-нибудь работа? Неужели это случилось? –
Пожалуйста, скомпилируйте свой код перед запросом! –
Обратите внимание, что вы можете удалить половину круглых скобок в инструкции 'new', и это будет означать одно и то же. –