Можно ли в конструкторе, два раза вызвать другой конструктор?
class Constructor
{
public:
Constructor()
{
printf("Default constructor\n");
}
explicit Constructor(int _a) : Constructor("explicit")
{
printf("Integer constructor\n");
this->a = _a;
}
Constructor(std::string _str) : str(_str)
{
printf("string constructor\n");
Constructor(true);
Constructor(1, 2);
}
Constructor(bool _flag) : flag(_flag)
{
printf("Bool constructor");
}
Constructor(int a, int b)
{
printf("one more");
}
void Print()
{
printf("a = %d\n", a);
printf("flag = %d\n", flag);
}
private:
int a;
std::string str;
bool flag = false;
};
int main()
{
Constructor cons(1);
cons.Print();
return 0;
}
Ожидаю увидеть в консоли:
string constructor
Bool constructor
one more
Integer constructor a = 1 flag = 1
А вместо этого:
Bool constructor Integer contstructor a = 1 flag = 1
Constructor("explicit")
Implicit conversion turns string literal into bool: const char[9]
to 'bool'
Constructor(std:string("explicit")) //так выполняется как вы ожидали
Конструкторы вызывать можно, если в контексте этого же объекта хотите создавать другие(!) объекты этого же типа класса, что и происходит в Constructor(true); Constructor(1, 2);
, где они сразу же удаляются при завершении работы конструктора.
Вызвать несколько конструкторов класса из одного конструктора этого класса можно только через многоуровневую делегацию конструкторов.
Выбор конструктора при делегации делается по обычным правилам разрешения перегрузки (overload resolution). По этим правилам преобразование аргумента "explicit"
к типу bool
является более предпочтительным, чем к типу std::string
. Потому и вызывается конструктор с параметром типа bool
void foo(bool) {}
void foo(std::string) {}
int main()
{
foo("Hello World"); // вызывается `foo(bool)`.
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть ли какая-то возможность забрать элемент из std::list одновременно удаляя его (не вызывая отдельно два метода front и pop_front)? Если такого метода...
cpp- ругается на цикл где if: expected unqualified-id before '->' token, не нравится Sprite
Выдает после установки bootstrap 4 и jQuery в панели разработчика ошибки
Я новичок в программировании и хотелось бы досконально разобраться в чем разница между div и spanСтоит ли использовать только div или только span или...