Проблема наследования C ++ при назначении базового класса подклассу - PullRequest
0 голосов
/ 04 августа 2011

Это может быть глупый вопрос о наследовании, но не имеет особого смысла, почему мне не разрешено это делать.Базовый класс, от которого я наследую: std::string:

class A : public std::string

Когда я использую class A, я хочу сделать это:

A text;
std::string str = "hello";
text = str;

Компилятор жалуется, что нетдвоичный оператор = для этого.

Причина, по которой я хочу унаследовать от строки, состоит в том, чтобы добавить некоторые дополнительные функции, но не потерять функциональность, которую std::string дает по умолчанию.

Есть липричина, по которой базовый класс не может быть автоматически назначен подклассу?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 04 августа 2011

Вы не можете наследовать операторы присваивания, им предоставляется особый режим.Вы можете использовать using для вызова их из базового класса.

Кроме того, ужасно плохо наследовать от стандартных классов, кроме iostream.

3 голосов
/ 04 августа 2011

Существует ли причина, по которой базовый класс не может быть автоматически назначен подклассу?

Да.Это потому, что базовый класс не является подклассом.Вы можете назначить только другой способ: назначение экземпляра подкласса экземпляру базового класса было бы хорошо, поскольку подкласс является базовым классом.

Это общее правило;другой ответ объясняет, что конкретно не так в случае std::string.

...