оператор '=' определенного класса запускает конструктор при объявлении - PullRequest
0 голосов
/ 06 октября 2018

Я хочу знать, есть ли способ заставить оператор = вызывать конструктор (или любой метод) класса после его объявления

скажем,

class foo
{
public:
string variable="";
foo(string var)
{
    this->variable=var;
}
foo(){}
void operator=(string var)
{
    this->variable=var;
}
} 
int main()
{
foo obj="new foo object";
}

Когда я запускаючто он говорит: «ошибка: преобразование из« const char [15] »в нескалярный тип« foo »запрошено»

Но когда я делаю это

foo obj;
obj="new foo object";

Это работает

Что я могу сделать, чтобы первый метод работал?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Почему бы вам просто не использовать конструктор (который в любом случае должен быть объявлен как явный, так что требуемая конструкция на самом деле является плохой практикой IIRC)?Просто сделайте:

foo obj("bar");

Также переменная не должна иметь пустое значение по умолчанию, конструктор по умолчанию создаст его правильно.Вы также должны поместить variable в список инициализаторов.

0 голосов
/ 06 октября 2018

Что я могу сделать, чтобы первый метод работал?

Предоставить конструктор, который принимает аргумент типа char const *.

И использовать список инициализацииконструкторов для инициализации членов, а не присваиваний в теле конструкторов.

Кстати:

foo obj = "new foo object";

НЕ вызывает operator=().

...