Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2013, 23:22   #1
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию Изучаю С++, имеются вопросы

По совету Пепел Феникса создал эту тему. Очень хотелось бы, чтобы ее не удаляли, я думаю, если мои вопросы будут находится в одной единственной теме, всем будет удобнее. Я не очень люблю создавать много тем, когда вопрос спецефичный, но при этом не особо сложный.
- Спасибо.

Вопросы:
Перехожу к ООП, хочу уточнить, что не понимаю.

Массивы:
Всегда ли стоит использовать арифмитические действия над указателями, вместо индексации массивов?

Функции:
Как лучше делать вызовы функций, через указатели, к примеру:
f(int *i)
или лучше использовать ссылочные параметры?

Поразрядные операторы:
Где в основном используются поразрадные операторы? При обработке сигнала какого-то определенного устройства, или еще где-то?

Структуры, объеденения:
Тот же вопрос, что и с массивами. Как лучше передавать структуры, ссылками или указателями?
Если вам не сложно, приведите пример использования Битовых полей и объеденений.

Вроде это все, что я не до конца понял.
— спасибо.

UPD1:
Для тех, у кого есть время, дайте пожалуйста задание для практики по этим главам (Мне нужно их повторить):
https://www.dropbox.com/sh/596nmo7vkqfhxa8/TddkIEI-6c

Последний раз редактировалось RussDragon; 13.06.2013 в 23:54.
RussDragon вне форума Ответить с цитированием
Старый 13.06.2013, 23:33   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

-арфиметические действия над указателями всегда выполняются быстрее, чем индексация (т.к при индексации компилятору приходится генерировать код сдвига от начала массива до указанной позиции... лишнее время)
-ссылки - это, ну, скажем, второе имя переменной... ссылка использует упрощенный, по сравнению с указателями, синтаксис (соответственно работает также).
Лучше передать адрес объекта в функцию явно для того, чтобы не искать прототип функции и не смотреть передается аргумент по ссылке или по указателю...
Для удобочитаемости кода + освобождения от возможных ошибок (утечка памяти и т.п) лучше использовать ссылки (но разумно использовать).
Igor95 вне форума Ответить с цитированием
Старый 13.06.2013, 23:43   #3
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Лучше передать адрес объекта в функцию явно для того, чтобы не искать прототип функции и не смотреть передается аргумент по ссылке или по указателю...
Для удобочитаемости кода + освобождения от возможных ошибок (утечка памяти и т.п) лучше использовать ссылки (но разумно использовать).
"Явно" имеется ввиду по значению?
RussDragon вне форума Ответить с цитированием
Старый 13.06.2013, 23:47   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Igor95
Цитата:
арфиметические действия над указателями всегда выполняются быстрее, чем индексация (т.к при индексации компилятору приходится генерировать код сдвига от начала массива до указанной позиции... лишнее время)
как грится, промолчишь - за умного сойдешь
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.06.2013, 23:53   #5
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Ну объясните Вы, не молчите :-)
Igor95 вне форума Ответить с цитированием
Старый 13.06.2013, 23:53   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

RussDragon

Всегда ли стоит использовать арифмитические действия над указателями, вместо индексации массивов?

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

Как лучше делать вызовы функций, через указатели, к примеру:
f(int *i)


если функция не изменяет параметр - то лучше всего передавать аргумент по-значению.
исключение составляют здоровенные типы/структуры. которые затратно копировать.
в общем случае ссылка предпочтительнее - она не может быть null, к тому позволяет организовать вызов без временной переменной

struct Foo {};
Foo GetFoo();

void DoSmth(const Foo&);

DoSmth(GetFoo());

Где в основном используются поразрадные операторы?

при работе с битами. Проверка битовой маски, подсчет битов и пр. алгоритмы

Тот же вопрос, что и с массивами. Как лучше передавать структуры, ссылками или указателями?

передавать по константной ссылке, если структура не меняется внутри функции, иначе - по ссылке

Если вам не сложно, приведите пример использования Битовых полей и объеденений.

посмотри определение структуры in_addr или LAGRE_INTEGER - объединение используется для быстрого доступа к разным частям значения
Rififi вне форума Ответить с цитированием
Старый 13.06.2013, 23:58   #7
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

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



:D
Rififi вне форума Ответить с цитированием
Старый 14.06.2013, 00:02   #8
RussDragon
Форумчанин
 
Аватар для RussDragon
 
Регистрация: 07.04.2012
Сообщений: 216
По умолчанию

Подождите, если я правильно понял, константная ссылка передает структуру, но изменять в функцие ее нельзя, правильно? Получается, что ее следует использовать только тогда, когда структура заполнена, не требует изменений функцией и просто нужно воспользоватся данными находящимися в ней?
RussDragon вне форума Ответить с цитированием
Старый 14.06.2013, 00:06   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от RussDragon Посмотреть сообщение
Подождите, если я правильно понял, константная ссылка передает структуру, но изменять в функцие ее нельзя, правильно? Получается, что ее следует использовать только тогда, когда структура заполнена, не требует изменений функцией и просто нужно воспользоватся данными находящимися в ней?
именно так
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.06.2013, 00:07   #10
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Цитата:
константная
неизменяется . постоянная...
mixon-21 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучаю спрос на готовые контент для сайтов (базы данных) Goldcoding Свободное общение 37 31.07.2012 12:01
Программа Угадыватель. Имеются вопросы... oliviya1111 Помощь студентам 31 09.12.2011 21:19
Изучаю javascript не пойму почему не работает скрипт 4e4en JavaScript, Ajax 8 11.09.2010 19:17
Изучаю книгу Сорокина БД в Делфи crossmark БД в Delphi 12 06.09.2010 18:12
Помогите пожалуйста, изучаю Си++ и есть недоумения ч0ткий кекс Общие вопросы C/C++ 8 14.10.2008 05:50