Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712

Нужен совет по созданию своего типа данных

19.03.2017, 13:53. Показов 811. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех. Мне необходимо создать свой тип данных "Пароль". Размер самого пароля всегда один и тот же и составляет 6 байт. Кроме этого необходимы функции для работы с данными. Посоветуйте, профессионалы, что правильнее использовать: класс или структуру? Как я понимаю, отличие класса в том, что он позволяет скрыть данные в private секции. Сейчас реализовано так:
C++
1
2
3
4
5
6
7
8
class TPassword
{ 
 BYTE Data[6];
 
 public:
 void SetData(BYTE *data) { Move(data, Data, 6); }
 BYTE *GetData() { return Data; }
};
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.03.2017, 13:53
Ответы с готовыми решениями:

Нужен урок по созданию своего шаблона
Навеяло отсюда: https://www.cyberforum.ru/joomla/thread758222.html ЛЮДИ ВЫРУЧАЙТЕ !!!!!! очень нужен Урок по созданию своего...

Нужен совет по созданию чата
Добрый день, мне нужно создать многоклиентский чат, но для этого необходимо знать ip клиентов, нужен совет как сделать так, чтобы не...

Нужен совет по созданию службы
Здравствуйте! Есть написанная и работающая программа. Требуется сделать из нее службу windows. Почитав литературу, сделал следующее, в...

16
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
19.03.2017, 14:04
Цитата Сообщение от d7d1cd Посмотреть сообщение
Как я понимаю, отличие класса в том, что он позволяет скрыть данные в private секции
Нет. Дефолтный квалификатор для struct - это public, но если задать private - то скрыть информацию можно и в структуре.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,149
Записей в блоге: 3
19.03.2017, 14:16
А что подразумевается под скрыть?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
19.03.2017, 14:22
Цитата Сообщение от Dinkin Посмотреть сообщение
что подразумевается под скрыть?
Сделать недоступными извне класса/структуры
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,149
Записей в блоге: 3
19.03.2017, 14:33
Даже не знаю как спросить то...а чем оно поможет то...если я укажу так
C++
1
2
3
4
5
6
7
8
9
..
{ 
 
 public:
 int a;
 
 private:
 int b;
};
То переменная b, будет защищена же только от видимости пространства имен..и все же, да? Но не более того?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
19.03.2017, 14:48
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct s
{
    int a;
public:
    int b;
};
class c
{
    int a;
public:
    int b;
};
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    s obj_s;
    c obj_c;
 
    obj_s.a = 10; // Ok
    obj_c.a = 10; // <--- Облом, скрытый член класса
}
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,149
Записей в блоге: 3
19.03.2017, 14:50
опечатка во втором классе?
Ну в общем я понял,что это просто для безопасности работы с данными, но на безопастность из вне ни как не влияет.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
19.03.2017, 14:56
Цитата Сообщение от Dinkin Посмотреть сообщение
но на безопастность из вне ни как не влияет
Извне - это извне, но в пределах приложения, не изнутри, не из метода класса. Про "из другой программы через дизассемблер" речь не идет. От подобных действий вообще нет защиты, и все, что рекламируется на рынке - это только против доморощеных хакеров, а не против серьезных контор, с по-настоящему мощными машинами, спец-аппаратурой и опытными сотрудниками.
1
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,149
Записей в блоге: 3
19.03.2017, 15:12
Я просто смотрю, все сетевые классы, на приватах. Но мне в моей скудной практике, так ни разу не пригодилась пользоваться скрытыми параметрами.
Я это к чему, а к тому что есть ли смысл для ТС-а, делать такое..внутри программы и так логика обыграна будет, а извне, в любом случае что приват,что паблик прочтеться.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
19.03.2017, 16:20
Такое имеет смысл делать всегда. Для удобства разработчика. Если бы это не было нужно - его не включили бы в язык вообще.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
19.03.2017, 16:32  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Дефолтный квалификатор для struct - это public, но если задать private - то скрыть информацию можно и в структуре.
Получается, грубо говоря, что использовать struct или class - это дело вкуса? Или же есть у них отличия?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
19.03.2017, 16:49
Насколько я знаю, кроме дефолтного квалификатора доступа (и, соответственно, дефолтного типа наследования -

C++
1
2
3
4
5
class a { /* ... */ };
class b : a { /* ... */ }; // частное наследование, аналог class b : private a { /* ... */ };
 
struct a { /* ... */ };
struct b : a { /* ... */ }; // общее наследование, аналог struct b : public a { /* ... */ };
), отличий больше нет. Выбирай, что больше нравится
2
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
19.03.2017, 16:57  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Выбирай, что больше нравится
Понятно. Еще вопрос. Описание класса делаю в h файле. Реализацию функций можно сделать в h или в cpp фале. В чем отличие?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
19.03.2017, 17:03
Обычно все, что делается в h-файле - это для передачи другим разработчикам. Все, что в cpp-файле остается у тебя. Поэтому я бы делал все реализации в cpp, а отдавал только описания членов класса/структуры и прототипы методов.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
19.03.2017, 18:52  [ТС]
volvo, это одна сторона. Я имел ввиду после компиляции код получается одинаковый когда реализация сделана в h файле и в cpp файле? Где то читал, что когда функция реализована в h файле, то компилятор считает ее inline.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
19.03.2017, 19:02
d7d1cd, если что - inline - это не приказ компилятору, а просьба (все, чего ты добиваешься, располагая реализацию в header-файле - это то, что ко всем таким методам применяется твоя просьба к компилятору сделать метод "встроенным"). Компилятор может сделать inline-функцию без просьбы, может не сделать даже с просьбой.
1
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
20.03.2017, 11:46  [ТС]
volvo, про то, что inline - это просьба, я знал.
Ну что ж, буду делать так: если необходимо просто объединить данные под одним именем, то буду использовать struct, если же надо иметь не только данные, но и функции для их обработки, то будет class.

Добавлено через 16 часов 31 минуту
Можно еще совет.
Чтобы занести данные в мой класс для этого можно написать функцию в самом классе, а можно сделать массив данных в классе доступным из вне и непосредственно в него заносить данные. Как лучше и правильнее сделать? Как бы сделали вы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.03.2017, 11:46
Помогаю со студенческими работами здесь

Нужен совет по созданию программы
Не подскажите, как на языке си оформить задачу, в которой пользователю предлагается выбор по типу: &quot;Если вы хотите то-то, нажмите 1,...

Нужен совет по созданию БД в Delphi
Мне необходимо создать программу-тренажёр для изучения математической логики. Я предполагаю случайным образом выбирать задания из базы...

Нужен совет по созданию игры
Здравствуйте планирую создать создать игру что-то промежуточное между аерохоккеем и футболом, знаю что надо будет использовать...

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

Нужен совет от профессионалов по созданию БД
Всем доброго времени суток. В общем есть такая задача: Нужно написать приложение, с помощью которого можно заносить данные в БД, а затем по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru