Я расширил std::string, чтобы удовлетворить свои потребности в написании пользовательской функции, встроенной в строковый класс с именем CustomString.
Я определил конструкторы:
class CustomString : public std::string {
public:
explicit CustomString(void);
explicit CustomString(const std::string& str);
explicit CustomString(const CustomString& customString);
//assignment operator
CustomString& operator=(const CustomString& customString);
... };
В третьем конструкторе (конструкторе копирования) и операторе присваивания, определение которого:
CustomString::CustomString(const CustomString& customString):
std::string(static_cast<std::string>(customString))
{}
CustomString& CustomString::operator=(const CustomString& customString){
this->assign(static_cast<std::string>(customString));
return *this;
}
Во-первых, поскольку это «явное»; это означает, что для назначения другому объекту CustomString требуется явное приведение; он жалуется на задание.
CustomString s = CustomString("test");
Я не уверен, где именно требуется явное приведение.
Код работает нормально, если конструктор копирования не является явным, но я хотел бы знать и реализовать явное определение вместо «угадывания правильного приведения».