Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
nickyoz писал(а):
Передача по ссылки имеет смысл практически всегда, когда внутри функции ты не изменяешь объект.
Пардон, это вдруг почему? Передача по константной ссылке имеет смысл практически всегда. Если хочешь изменить объект - то просто по ссылке, или передавать указатель, как это любят делать в больших библиотеках, в том же QT. Они считаю, что obj->method(&instance) нагляднее демонстрирует то, что объект измениться, нежели obj->method(instance).
Member
Статус: Не в сети Регистрация: 14.03.2004 Откуда: Москва
Daemon Хм. Наглядность не есть цель. Цель - гарантирование валидности объекта при передачи. Хотя конечно это вопрос удобства.
Хотя про константность ты прав. Это ещё более повышает поиск ошибок. Я просто не стал редактировать запись, когда прочитал твой предыдущий пост
_________________ ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо
Member
Статус: Не в сети Регистрация: 14.03.2004 Откуда: Москва
Билли Бонс Ну. С индусским кодом совсем плохо... Мое ИМХО ( и не только мое) - назвнаие класса/метода/переменой должно полноценно определять его семантику
_________________ ФИЗТЕХ- рулез, ФАКИ - сила, Кванты тоже хорошо
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Почему-то не получается использовать глобальные переменные с помощью слова extern. Нужна глобальная переменная, одна на всю программу, к которой также бы имели доступ методы класса. Класс находится в отдельном файле. Объявляю переменную в заголовочном файле stdafx.h (который подключаю ко все файлам), затем в файле реализации моего класса определяю эти переменные, используя extern, но использовать их не получается в функциях членах класса:
фрагмент stdafx.h:
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Кривая книга Липпмана, надо было наоборот extern писать в заголовочном файле, а не в срр. Тогда вопрос, будет ли доступ к этой переменной из других файлов проекта, если я подключу к ним stdafx.h?
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Билли Бонс И все-таки как сделать глобальную переменную, чтобы ее могли использовать и методы класса и допустим я мог ее изменять в функции main() моей программы?
Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
jeki ты приведи полный вид структуры и функции чтения и записи. Тогда посмотрим.
kexman писал(а):
И все-таки как сделать глобальную переменную, чтобы ее могли использовать и методы класса и допустим я мог ее изменять в функции main() моей программы?
Обьявляй переменную в пределах функции main(или хоть глобально в том же файле) и передавай классу указатель на переменую(в конструкторе или отдельным методом) .
Member
Статус: Не в сети Регистрация: 12.12.2003 Откуда: Уфа
Билли Бонс Не понял, можно подробнее, для этого отдельный .cpp файл надо создавать и включать его во все файлы, где нужен доступ к этой переменной?
mein Они и так должны изменяться методами класса.
Member
Статус: Не в сети Регистрация: 14.01.2004 Откуда: Киев, Украина
kexman короче говоря, есть такая штука - как единица трансляции, это С++ фаил после обработки его препроцессором, т.е. включения в него всех h файлов. Представь, что если глобальные переменные объявить в h файле? Каждая единица трансляции будет содержать свою копию переменной. Нужно определить переменную в любом С++ файле, и объявить ее с директивой extern в нужном тебе файле. А вообще - это порочная практика, глобальные переменные. Добавлено спустя 1 минуту, 21 секунду PS Форум программирование приобретает большую популярность, это хорошо
_________________ Ку ку
Последний раз редактировалось Daemon 06.12.2006 18:38, всего редактировалось 1 раз.
Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
kexman писал(а):
Они и так должны изменяться методами класса
Если твоя функция main видит класс, то значит и видит и его методы. Сделай методы изменяющие каждую переменную по отдельности и меняй на здоровье. Скорее всего не потребуются даже глобальные переменные. Типа того:
myclass.h
Код:
class myclass{ int globvar; // не glob конечно, но для наглядности .... public: void SetGlobVar(int var) { globvar = var; } int GetGlobVar() { return globvar; } int* Get_pGlobVar() { return &globvar; }; ... };
main.cpp
Код:
#include "myclass.h" int main() { myclass obj; obj.SetGlobVar(20);
// или так. Некрасиво конечно ... :) int* pg = obj.Get_pGlobVar(); (*pg) = 20; }
Junior
Статус: Не в сети Регистрация: 04.05.2006 Откуда: Чайковский.
что то типа этого. Тока оформлено не функциями т.к. это тестовая прога а не та где мне нужно чтение и запись в файл. Что неправильно? Обычно вылетае на последней скобке. именно это мне и кажется странным.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения