Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
#1

Структуры - C++

17.10.2013, 19:54. Просмотров 1218. Ответов 17
Метки нет (Все метки)

Добрый вечер. Может кто объяснить что такое структуры(что означают записанные переменные в структуре и после фигурных скобок, перед ; и т.д.) и зачем в них ->? Читаю Дейтела, но так и не понял. В интернете понятного разъяснения не нашел.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 19:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структуры (C++):

Помещение структуры в вектор, удаление структуры, изменение элементов структуры - C++
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Функция внутри структуры использует указатель, как поле этой структуры - C++
Коротко, есть класс A, описан в файле A_class.h ну и реализованы функции в A_class.cpp, есть файл GlobalItems.h, где хранятся глобальные...

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё. - C++
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры) - C++
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом создаю экземпляр, Subject G; ...

Вывод структуры, строка как элемент структуры - C++
Описать структуру с именем TRAIN, содержащую следующие поля: □ название пункта назначения; □ номер поезда; □ время отправления. ...

Исследование структуры FILE или: что вообще можно выудить из этой структуры, указатель на которую мы получаем при открытии файла? - C++
Ничего нельзя. Итак, новичкам напомню, что после выполнения кода FILE* f= fopen ("file.txt", "w"); в переменной f содержится...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
17.10.2013, 20:31 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
struct car
{
    std::string make;
    std::string model;
    int year_of_production;
};
 
int main()
{
    car my_car_obj {"Honda", "Accord", 2008};
 
    std::cout << "Access from object:\n";
    std::cout << my_car_obj.make << std::endl
              << my_car_obj.model << std::endl
              << my_car_obj.year_of_production << std::endl;
 
    car *my_car_ptr = &my_car_obj;
    std::cout << "\nAccess from pointer to object:\n";
    std::cout << my_car_ptr->make << std::endl
              << my_car_ptr->model << std::endl
              << my_car_ptr->year_of_production << std::endl;
    return 0;
}
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
17.10.2013, 20:54 #3
допустим, у нас есть автомобиль.
у автомобиля есть такие атрибуты как марка, модель, цвет, год издания, максимальная скорость и другие
и чтобы все эти значения "держать" в одном месте, можно использовать одну структуру

назовем ее car:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// автомобиль
struct car
{
    char    make[20];   // марка
    char    model[20];  // модель
    char    color[20];  // цвет
    int     year;       // год издания
    int     speed;      // скорость
};
 
 
 
int main()
{
    car     *BMW = new car;     // создали новый автомобиль
    
    // теперь нужно установить его характеристики
    // для доступа к ним используется знак ->, т.к. BMW это указатель
    strcpy(BMW->make, "BMW");
    strcpy(BMW->model, "MINI Cooper Cabrio");
    strcpy(BMW->color, "red");
    BMW->year = 2013;
    BMW->speed = 200;
}
1
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
17.10.2013, 22:27  [ТС] #4
Olivеr, _,
C++
1
2
3
4
5
6
struct car
{
    std::string make;
    std::string model;
    int year_of_production;
}a[20], i, k;
Для чего нужны последние переменные? И еще я спрашивал про ->
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
17.10.2013, 23:22 #5
Цитата Сообщение от Ryuk Посмотреть сообщение
Для чего нужны последние переменные?
a[20] - массив из 20-ти car, i и k - переменные типа car
Цитата Сообщение от Ryuk Посмотреть сообщение
И еще я спрашивал про ->
используется для доступа к членам класса через указатель на объект. в примере есть
1
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
17.10.2013, 23:34  [ТС] #6
Olivеr, как может быть переменная типа car?
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
18.10.2013, 08:49 #7
Ryuk, car - это тип переменной (как char, int, float и другие) но только это собственный тип переменной, определенный программистом

C++
1
2
3
4
5
6
struct car
{
    std::string make;
    std::string model;
    int year_of_production;
}a[20], i, k;
a[20] - это массив из 20 элементов, каждый из которых имеет тип car. другими словами 20 автомобилей
i и k - это отдельные переменные типа car (не массивы)

для доступа к полю первого авто в массиве используется оператор точка:

a[0].make = "Honda"; // для первого автомобиля установили его марку

но если у нас указатель, то для доступа к членам нужно использовать стрелку

car *avto = new car;
avto->make = "Honda";

Добавлено через 7 минут
Цитата Сообщение от Ryuk Посмотреть сообщение
Olivеr, _,
C++
1
2
3
4
5
6
struct car
{
    std::string make;
    std::string model;
    int year_of_production;
}a[20], i, k;
Для чего нужны последние переменные? И еще я спрашивал про ->
тут смысл вот какой. переменные можно определять сразу же после закрывающей фигурной скобки через запятую, а можно и отдельно, в другой части программы
C++
1
2
3
4
int main()
{
   car  a[20], i, k;
}
а результат практически один и тот же. в первом случае эти переменные будут глобальными, а во втором локальными (видны только в main)

про -> уже ответили

Добавлено через 3 минуты
тут можно просто запомнить, что есть два типа переменных: обычные и указатели. для обычных переменных для доступа к членам структуры используется оператор точка:
C++
1
2
car avto;
avto.make = "Honda";
но а если это указатель, то используется стрелка:
C++
1
2
car *avto;  // указатель
avto->make = "Honda";
0
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
18.10.2013, 14:44  [ТС] #8
_,
C++
1
2
3
4
5
struct car
{
    int     year;       // год издания
    char color;      // цвет по первой букве
}a;
Что будет, если я запишу в a цифры, и если я запишу букву?
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,061
Завершенные тесты: 1
18.10.2013, 14:52 #9
Цитата Сообщение от Ryuk Посмотреть сообщение
Что будет, если я запишу в a цифры, и если я запишу букву?
как именно запишешь?

так?
C++
1
2
a.year = цифры;
a.color = буква;
будет присвоение соответствующих полей структуры car объекта 'a', как при обычном присвоении переменных
1
Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 871
18.10.2013, 15:07  [ТС] #10
Raali, нет, я не могу в main записать просто a = .... без оператора "точка"?
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
18.10.2013, 15:13 #11
Цитата Сообщение от Ryuk Посмотреть сообщение
Что будет, если я запишу в a цифры, и если я запишу букву?
в саму a невозможно ничего записать. a - это составной тип и состоит из полей year и color

C++
1
a = 5; // неправильно!
C++
1
2
a.year = 2000; // правильно. указали что год издания авто 2000
a.color = 'g';  // тоже правильно. здесь указали цвет автомобиля (g - green - зеленый)
Добавлено через 2 минуты
Цитата Сообщение от Ryuk Посмотреть сообщение
я не могу в main записать просто a = .... без оператора "точка"?
нет, не можешь
1
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,061
Завершенные тесты: 1
18.10.2013, 15:19 #12
Цитата Сообщение от Ryuk Посмотреть сообщение
я не могу в main записать просто a = .... без оператора "точка"?
давайте пойдем от обратного... зачем нам нужна именно структура?
для того, чтобы мы не писали так -
C++
1
2
3
4
int car1_year = 1024;
char car1_color = 1;
int car2_year = 5000;
char car2_color = 3;
0
gazlan
3131 / 1906 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
18.10.2013, 15:35 #13
Цитата Сообщение от Raali Посмотреть сообщение
зачем нам нужна именно структура
Структура - это способ упаковки.

Зашли, к примеру, в супермаркет, набрали всего полную тележку, подъехали к кассе и предъявили покупки.

Ваша тележка - это структура. Товары в ней - элементы структуры. Если однородного товара несколько штук - это массив элементов. Если есть товары в упаковке - это вложенная структура.

. и -> - это способы адресации элементов структуры (непосредственная и косвенная).

Когда берете товар из своей тележки - это . (непосредственная)

Когда говорите - это из тележки того парня - это -> (косвенная).
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
18.10.2013, 15:38 #14
Ryuk, напишу проще))
вообщем есть автомобиль. что мы о нем должны знать? год издания и цвет (конечно можно добавить еще кучу дополнительных атрибутов) но в данный момент нам нужны только год издания и цвет.

мы объявляем такую структуру:
C++
1
2
3
4
5
struct car
{
    int     year;       // год издания
    char color;      // цвет по первой букве
};
дальше в программе мы можем создать переменную a вот таким способом:
C++
1
2
3
4
int main()
{
   car a;  // автомобиль
}
создали. что теперь?... нужно указать какого года выпуска автомобиль a и какой у него цвет
C++
1
2
a.year = 2000;
a.color = 'g';
все! у нас есть машина и мы кое-что знаем о ней

чтобы напечатать год издания, то через точку . можем получить любой атрибут нашего авто
C++
1
cout << a.year;  // год издания
но потом в другой части программы можно вывести цвет авто
C++
1
cout << a.color;

конечно, можно обойтись и без структур, объявить несколько переменных. одна переменная будет указывать год издания, другая цвет. как ответил Raali в предыдущем посте. но в этом одни только минусы. во-первый количество этих переменных будет много. представь, если для машины будем указывать не два атрибута а 10 или 20. (год издания, марка авто, цвет, количество дверей, количество сидений, цена, тип двигателя ....) и для каждого атрибута должны определить отдельную переменную. а если автомобиль не один а 100. что тогда? бессчетное количество никому ненужных переменных. а так всё хранится в одной структуре! красота)
0
Olivеr
412 / 408 / 13
Регистрация: 06.10.2011
Сообщений: 831
18.10.2013, 22:02 #15
Цитата Сообщение от Ryuk Посмотреть сообщение
_,
C++
1
2
3
4
5
struct car
{
    int     year;       // год издания
    char color;      // цвет по первой букве
}a;
Что будет, если я запишу в a цифры, и если я запишу букву?
C++
1
2
3
4
5
6
7
8
9
10
11
struct car
{
    int     year;       // год издания
    char color;      // цвет по первой букве
}a;
 
int main() 
{
    a = {2008, 'b'};
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2013, 22:02
Привет! Вот еще темы с ответами:

Оператор if и структуры. Возвращение структуры из функции - C++
Здравствуйте, имеется такая вот функция. void InputStructEmployee (int StructSize) { StructEmployee UsrStruct; string...

Структуры. Вызов данных структуры по указателю. с++ - C++
Условие задачи: Помогите, пожалуйста, с как реализовать печать вообще не представляю.

Структуры. Работа с файлами, содержащими структуры - C++
2) Дана совокупность сведений, каждое из которых состоит из следующих рекви-зитов: фамилия и инициалы автора – 25 знаков; название книги –...

Понятие структуры данных. Элементарные структуры данных. Простые структуры данных - C++
Понятие структуры данных. Элементарные структуры данных. Простые структуры данных: методы реализации, особенности в различных языках...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
18.10.2013, 22:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru