alex_deerk вообще на будущее: старайтесь выкладывать вместе с кодом еще и декларации используемых в нём переменных/полей класса. Да и вообще сущностей, встречающихся в коде. C++ очень гибок, некая переменная может быть указателем, а может быть указателем на массив указателей на указатели, поэтому сначала приходится "компилировать" код в голове, понимать какие типы данных у переменных, а потом заново всё осмысливать. Тем более что в таком виде как у вас в продакшене кода не будет - никто без особых причин не будет игнорировать стандартный класс вектора и пользоваться вместо него "сишным" массивом на куче.
alex_deerk неудобно делать выводы, когда вообще не видишь, какой сейчас тип у places :). Ну раз код new Patient[count_places] компилируется, то очевидно тип places это Patient*.
> а какой тогда должен быть тип places? двойной указатель?
Да. А лучше - вектор из указателей, т.е. std::vector, но раз вам стандартную библиотеку нельзя, то да, Patient** places. Тогда вы сможете присвоить places указатель на массив (!) указателей на Patient, т.е. places = new Patient*[count_places]; И тогда вместо
>places[0] = p;
будет places[0] = &p; ну или если вы передадите параметр как указатель, а не как ссылку, т.е. Patient *p вместо Patient &p, то будет просто places[0] = p;
Напоминаю, что весь этот сыр бор нужен, если вам действительно нужно работать с Пациентом, как с объектом.
> А в прошлом варианте places = &p; я разве не участок памяти присваиваиваю, то есть тот указатель который вне данного метода и указатель places указывают на один и тот же объект?
Да, вы верно это понимаете (фразу "участок памяти присваиваиваю" я читаю как "указатель на участок памяти присваиваю", верно?), мне там привиделось разыменование (places = *p), а не взятие адреса. Привиделось потому, что вы берёте и сохраняете в places адрес объекта, пришедшего извне, и его дальнейшая судьба не вполне ясна. Если вы передадите в функцию addPacient объект, находящийся в куче, и он будет жить как минимум столько же, сколько вы с ним работаете через указатель в places, то всё будет в порядке. Если объект будет создан на стеке, и после добавления в places будет разрушен, то попытка работать с ним после его разрушения ни к чему хорошему не привёдет. Откуда приходит объект Pacient в функцию addPacient - известно только вам).
alex_deerk ну да, именно "живой" - если вы передаёте/храните указатель, вы передаёте/храните "ключ" к объекту, такому какой он есть сейчас, а не такому, какой он был ранее.
Антон Жилин в принципе я не сколько про виртуальность, сколько про состояние. Если передавать Person по значению, то оно будет вести себя как запись, т.е. как слепок состояния Person в какой-то момент времени. Если передавать/хранить по указателю - то мы передаём именно identity объекта - т.е. если его состояние впоследствии изменится, мы это увидим. Что конкретно нужно передавать - слепок состояния объекта, или же сам "живущий" объект - известно только автору кода)
alex_deerk я понял, ну тогда вам виднее. Просто если задание заключается непосредственно в написании некоторой структуры данных - тогда требование не использовать библиотеку еще можно понять, но для предметной задачи такое требование только усложняет задание и не даёт человеку сконцетрироваться на чём-то одном.
alex_deerk
> Спасибо, но требуется без stl (string уже непозволительная роскошь)
Вас обучают разработке на C++, и требуют не использовать стандартную библиотеку? Это что за университет, если не секрет?
Алексей Уколов написали бы в ответ, я например с вами согласен) надо правда уточнить, что надо парсить, и есть ли нормальные библиотеки. Артём, что вам надо парсить?
> Это реализовано в любом фреймворке. Фреймворк может определить где начинается ,например,класс, и где он заканчивается.
Что в данном случае понимается под фреймворком? О каком редакторе текста идёт речь и что вы конкретно планируете сделать? Редактор написан вами или вы собираетесь написать подсветку к какому-то популярному редактору?