Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Peter_P насчет второго примера, это описание конструктора класа со списком инициализации. Как известно, в момент вызова конструктора класса инициализируються все поля класса, мы можем явно указать, какими значениями инициализировать поля:
Цитата:
Heater :: Heater(Location 1)
Это описание коструктора classname::constructor, в С++ имя конструктора точно такое же как имя класса. После двоеточия идет список инициализации:
В С++ семантика каждого типа - это семантика объекта, т.е. как для типа repLocation(1) мы вызываем конструктор и тем самым инициализируем его, точно также иницаилизируем простую переменную repIsOn.
Цитата:
&SerialPort::ports[l]
Фактически получаем указатель на массив, который являеться статическим членом класса. Все статические члены и методы класса создаються во время старта программы и уничтожаються во время ее закрытий, еще не имеют указателя this (потому как существуют в независимости от созданого экземепляра класса). Доступ к ним возвожен так:
Цитата:
class::Method();
Цитата:
Heater::Heater() {}
Перегруженный конструктор.
И еще, тут видимо опечатка:
Цитата:
Heater :: Heater(Location 1)
Добавлено спустя 6 минут, 6 секунд
Цитата:
Второе - разве можно при определении класса ссылатся на него же (такая вот рекурсия)?
Почему бы и нет? Какая это рекурсия? Это не рекурсия, как по твоему списки объявляються?
Код:
struct A { A *Next; }
Код:
Boolean Heater::is0n() const
Слово const после объявления метода класса значит лишь то, что этот метод не может изменить ни одного члена класса, кроме тех, которые объявлены как mutable, по типу
Код:
... private: mutable int a; ...
Добавлено спустя 3 минуты, 27 секунд PS вообще-то лучше читать стандарт, а не книгу там где показан плохой стиль программирования
PPS если location это класс, то его лучше передавать не по значению, а по константной ссылке:
Member
Статус: Не в сети Регистрация: 25.11.2005 Откуда: краснодар
мишка писал(а):
int a[NN][NN];
помоему массив в DOS не может быть больше 64 килобайт а тут 200*200*4=160 кбайт Добавлено спустя 3 минуты, 32 секунды по первому пункту:
ты запускаеш прогу из среды программирования?
откуда прогу запустил то и есть её домашняя папка
и все файлы в етой папке можно читать по относительному пути
среда наверняка компилит файл куда-нить в projects-здесь и косяк
Member
Статус: Не в сети Регистрация: 07.02.2004 Откуда: Свердловская...
У меня вопрос.
Почему все мои проги (С++) под консоль занимают 1,2 Мб??? Юзаю Dev-C++. Когда писал на чистом Си все проги занимали не более 100 кб? Тоже в Dev-C++ было дело.
Как мне сделать размерчик то поменьше?
_________________ Если надпись на мониторе уменьшается, то ваш монитор уносят.
Member
Статус: Не в сети Регистрация: 06.09.2005 Откуда: Москва
Лучшим выходом было бы выбрать другой компилятор. Лучше всего вообще писать под линукс, но если не хочется, то установить нормальную DE под венды. Имхо, в данный момент такой является VS2003 или 2005. Если и этого делать не хочется, то посмотреть в настройках твоей среды опции компилятора. В частности, убрать опции по отладке (debug), можно попытаться настроить проект так, чтобы исполняемый файл использовал DLL, не включая их в себя статически.
Member
Статус: Не в сети Регистрация: 14.03.2004 Откуда: Москва
dimonpc2004 Заставит компилятор не включать неиспользуемы функции и переменные. заставить отключить динамическое определение типов, если ты ег оне используешь... Это как минимум
_________________ ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо
Member
Статус: Не в сети Регистрация: 13.11.2004 Откуда: Новосибирск
Есть ли какая-то принципиальная разница в использовании new/delete и alloc/realloc/free? Почему функции alloc, realloc и free считают устаревшими и есть ли способ изменить размер динамически выделенной памяти не используя realloc?
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
qasz
Цитата:
Есть ли какая-то принципиальная разница в использовании new/delete и alloc/realloc/free?
Есть конечно. malloc/calloc просто выделяют память, но не ицициализируют объект ( не вызывают конструктор для не POD типов) и free/cfree не вызывают деструктор. new/delete выполняют. такие операции, operaton new и operator delete не выполняют.
Цитата:
способ изменить размер динамически выделенной памяти не используя realloc?
Нету, для этой цели нужно использовать контейнеры из STL. Добавлено спустя 4 минуты, 19 секунд
Цитата:
Почему функции alloc, realloc и free считают устаревшими
Одну причину я уже назвал. Вторая - то, что использование realloc может нести серьезные накладные расходы, потому как realloc если не может изменить размер выделенной памяти - выделяет новую область требуемого размера и выполняет копирование, плюс по этому причине realloc может работать не корректно для не POD типов.
VC говорит что не может конвертнуть 'wchar_t [100][100]' to 'wchar_t ** . Собственно почему и как мне поступить в таком случает, если надо передавать двумерный массив.
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
nickyoz
Цитата:
побробнее можно, может я что-то не понял
Потому как при копировании(если будет происходить копирование) realloc не будет вызывать конструкторов/деструкторов, в зависимости от того какие действия в них происходят realloc может работать, а может и не работать для твоего типа. И вообще копировать не POD типы с помощью memcpy строго не рекомендуют.
mein ну я думаю к этому времени ты и сам разобрался У тебя есть указатель на первый элемент. В ф-ции нужно передать указатель на указатель, так организуй xxx(&buf[0]);
Если будет компилятор выпендриватся:
xxx(reinterpret_cast<wchar_t **>(&buf[0]));
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
Что-то неработает корректно, при попытке обращения к элементу происходит ошибка Два выхода или объявляй в программе не двумерный массив, а wchar_t **buf; или передавай массивы как рекомендует стандарт void xxx(wchar_t x[][100]) Добавлено спустя 1 минуту, 17 секунд Или используй vector Добавлено спустя 3 минуты, 4 секунды
mein писал(а):
не работает - неправильно доходит указатель.
Тогда посмотри вывод:
Код:
void xxx(wchar_t **x) { std::cout << x << std::endl; }
int _tmain(int argc, _TCHAR* argv[]) { wchar_t buf[100][100];
Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
Daemon пока сделал через xxx(wchar_t x[][100]) - работает, но выглядит страшно. vector для такой простой ситуации не охота юзать.
а вот из примера я высмотрел другую весчь:
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения