Почему конструктор не может быть объявлен как static в C++?
Я недавно закончил читать 1-й том. мышления в C++ Брюс Эккель и теперь стали применять знания на практике.
недавно я работал со статическими функциями-членами и попытался сделать конструктор статическим, за что компилятор был недоволен. Я проверил причину в книге, но ничего не нашел.
может кто-нибудь объяснить, почему?
П. С.: После просмотра некоторых ответов, я хотел бы отметить, что путаница возникает из-за того, что я знаю, что C# (и Java) позволяет конструкторам объявляться как статические.
4 ответов
целью конструктора является инициализация содержимого экземпляр класса.
статические методы не имеют связанного с ними экземпляра.
следовательно, нет такой вещи, как статический конструктор.
язык как таковой не обеспечивает такой функциональности, но может быть смоделирован косвенно. См.ответ для более подробной информации. Не то, чтобы я действительно уверен, зачем вам нужно было это делать.
функция-член конструктора создает объект, как указано, используя существующее распределение -- т. е. this
присутствует.
static
функции-члены не указывают хранения для объекта, поэтому нет связанного экземпляра для построения -- т. е. this
отсутствует. Таким образом, нельзя указать статический конструктор.
возможно, вы ищете именованную статическую функцию-член, которая возвращает экземпляр по значению:
class t_object {
public:
static t_object Func(…optional parameter list…) {
t_object result(…ctor parameters…);
…initialize result…
return result;
}
...
};
одна очень полезная функция C++ над C-это правильный способ правильной инициализации и очистки, когда создаются экземпляры определенного пользователем типа, чтобы у вас был хорошо сформированный объект, готовый начать работу.
язык достигает этого через механизм конструкторов и деструкторов.
Как вы можете заметить, причина, по которой существуют конструкторы и деструкторы, заключается в поддержании созданных экземпляров.
теперь static
подразумевает или, по-крайней мере, используется, когда есть что-то общее, что все объекты могут использовать. Вы используете его, когда действительно есть что-то, что должно быть разделено между всеми экземплярами класса, который вы создаете.
и интерфейса к статическим членам данных класса осуществляется через статические функции-члены, которые в основном используются на статические данные-члены.
Итак, если конструктору разрешено быть статическим, что он должен возможно, это означает, что определение, данное ему, делая его статическим, является still
в строках причины, по которой он вошел в изображение(чтобы правильно инициализировать объект, прежде чем вы его получите). Итак, если нет объекта, то нет смысла иметь конструктор/деструктор.
Если вы думаете о приведенных выше строках, нет смысла разрешать конструкторам быть статичными, по крайней мере, в этом случае(в C++). Следовательно, он не поддерживается этим языком.