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

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

Восстановить пароль Регистрация
 
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
17.10.2013, 19:54     Структуры #1
Добрый вечер. Может кто объяснить что такое структуры(что означают записанные переменные в структуре и после фигурных скобок, перед ; и т.д.) и зачем в них ->? Читаю Дейтела, но так и не понял. В интернете понятного разъяснения не нашел.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2013, 19:54     Структуры
Посмотрите здесь:

Структуры Оо C++
C++ Структуры
Структуры C++
C++ Структуры...
Структуры в С++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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;
}
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;
}
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
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;
Для чего нужны последние переменные? И еще я спрашивал про ->
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
17.10.2013, 23:22     Структуры #5
Цитата Сообщение от Ryuk Посмотреть сообщение
Для чего нужны последние переменные?
a[20] - массив из 20-ти car, i и k - переменные типа car
Цитата Сообщение от Ryuk Посмотреть сообщение
И еще я спрашивал про ->
используется для доступа к членам класса через указатель на объект. в примере есть
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
17.10.2013, 23:34  [ТС]     Структуры #6
Olivеr, как может быть переменная типа car?
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";
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
18.10.2013, 14:44  [ТС]     Структуры #8
_,
C++
1
2
3
4
5
struct car
{
    int     year;       // год издания
    char color;      // цвет по первой букве
}a;
Что будет, если я запишу в a цифры, и если я запишу букву?
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
18.10.2013, 14:52     Структуры #9
Цитата Сообщение от Ryuk Посмотреть сообщение
Что будет, если я запишу в a цифры, и если я запишу букву?
как именно запишешь?

так?
C++
1
2
a.year = цифры;
a.color = буква;
будет присвоение соответствующих полей структуры car объекта 'a', как при обычном присвоении переменных
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
18.10.2013, 15:07  [ТС]     Структуры #10
Raali, нет, я не могу в main записать просто a = .... без оператора "точка"?
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 = .... без оператора "точка"?
нет, не можешь
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 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;
gazlan
2855 / 1803 / 271
Регистрация: 27.08.2010
Сообщений: 4,883
Записей в блоге: 1
18.10.2013, 15:35     Структуры #13
Цитата Сообщение от Raali Посмотреть сообщение
зачем нам нужна именно структура
Структура - это способ упаковки.

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

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

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

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

Когда говорите - это из тележки того парня - это -> (косвенная).
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. что тогда? бессчетное количество никому ненужных переменных. а так всё хранится в одной структуре! красота)
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
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;
}
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
18.10.2013, 22:20  [ТС]     Структуры #16
_, не могли бы вы еще помочь с данной темой, т.к. думаю вы человек знающий и имеющий способность хорошо объяснять?
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
18.10.2013, 22:27     Структуры #17
Меня тоже мучает такой же вопрос.Если я все правильно понял в программе вместо кучи разных переменных можно создать одну структуру и использовать ее как эти переменные т.е передавать в функции подставлять в формулы короче производить все необходимые действия как с обычными переменными.Или я не правильно понял.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.10.2013, 04:24     Структуры
Еще ссылки по теме:

Структуры в С++. C++
структуры си++ C++
C++ структуры C++

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

Или воспользуйтесь поиском по форуму:
FiLF
52 / 52 / 15
Регистрация: 05.09.2013
Сообщений: 1,088
19.10.2013, 04:24     Структуры #18
Цитата Сообщение от Genn55 Посмотреть сообщение
Меня тоже мучает такой же вопрос.Если я все правильно понял в программе вместо кучи разных переменных можно создать одну структуру и использовать ее как эти переменные т.е передавать в функции подставлять в формулы короче производить все необходимые действия как с обычными переменными.Или я не правильно понял.
Да, почитайте про классы в C++.
Yandex
Объявления
19.10.2013, 04:24     Структуры
Ответ Создать тему
Опции темы

Текущее время: 14:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru