LINUX.ORG.RU

конструктор класса

 


0

1

вобщем мне глупому уже пытались объяснить разницу. но я не понял. я даже гуглил. если есть время у кого, то пожалуйста объясните.


#include <iostream>
template<typename data>
class list{
public:

data n;



};
int main(int argc, char*argv[]){
list<int>obj(11);//так будет ошибка.
list <int>obj{11}; // так будет норм.  
return 0;
}
в чем разница между круглыми и квадратными скобками?


ребята, если еще несложно, то пожалуйста и это разъясните

#include <iostream>
template<typename data>
class list{
public:

data n;

list(data obj){this->n=obj}

};
int main(int argc, char*argv[]){
list<data>obj(11);//так будет ошибка.
list <data>obj{11}; // и так будет ошибка 
return 0;
}


linuxpc
() автор топика
Ответ на: комментарий от linuxpc

то есть как при создания объекта сделать его шаблонным?

linuxpc
() автор топика

Потому что ты не реализовал конструктор. В случае с фигурными скобками используется обычный сишный инициализатор, и это рабоает благодаря тому, что у тебя все поля у класса публичные. Круглые скобки используются для вызова конструктора, которого у тебя нет.

PS: Форматируй код прежде, чем постить. Можешь использовать clang-format для этого.

anonymous
()
Ответ на: комментарий от linuxpc

Когда инстанциируешь шаблон, в угловые скобки нужно подставить уже конкретный тип, int в твоём случае.

anonymous
()
Ответ на: комментарий от anonymous

извините,но зачем форматировать код? что это вообще значит?

а обычный сишный инициализатор это что? тоже конструктор? или метод? объясните пожалуйста как сделать так ,чтобы в угловых скобках можно было указывать шаблоный параметр у нас он data назван

linuxpc
() автор топика
Ответ на: комментарий от linuxpc

Форматировать код - расставлять пробелы, переносы строк, отступы и т.д. таким образом, чтобы читать было удобно. Сейчас у тебя всё прижато к левому краю, рандомные пустые строки, в одном месте есть пробел, в другом нет. Вот так можно отформатировать твой код:

#include <iostream>

template <typename data>
class list {
public:
    data n;
};

int main(int argc, char* argv[]) {
    list<int> obj(11);  // так будет ошибка.
    list<int> obj{11};  // так будет норм.
    return 0;
}

Инициализатор в фигурных скобках (который я назвал «сишным») - не конструктор, а просто перечисление значений полей класса. Его обычно используют для простых структур, типа таких:

struct Point {
    double x;
    double y;
};

...

Point p = {1.3, 4.7};

Параметр data относится только к определению шаблона. Когда ты используешь свой шаблон, вместо data ты подставляешь нужный тебе тип. В своём первом посте ты уже это делал.

anonymous
()
Ответ на: комментарий от linuxpc

извините, это был вопрос. у структуры есть конструктор?

linuxpc
() автор топика
Ответ на: комментарий от anonymous

скоро. неужели Вы думаете, что станет лучше?

linuxpc
() автор топика
Последнее исправление: linuxpc (всего исправлений: 1)
Ответ на: комментарий от KennyMinigun

А в C++20 как примут wg21.link/p0960 и п-ц.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.