Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
alexkrasny
0 / 0 / 3
Регистрация: 07.07.2014
Сообщений: 37
1

Дополните мои знания (структуры и перечисления)

30.06.2016, 19:47. Просмотров 307. Ответов 11
Метки нет (Все метки)

Здравствуйте. Изучаю основы ООП C++. Хочу сделать вот какую штуку!

1) Хочу выкладывать исходники на C++ по заданной теме из ООП.
2) Хотел бы узнать то, что не реализовал в данной теме.
3) Хотел бы иметь замечания по написанию переменных (английский на низком уровне у меня), а также замечания или добавления по написанию самого кода (что-то типо: "С профессиональной точки зрения, это пишется так..." или "Никто так не пишет уже! Все пользуются вот этим..." или "Вы не написали как это делать..." и т.п.).

Благодаря Вам, я хочу "зашпаклевать" свои недочеты и восполнить пробелы. Хотелось бы стать более "знающим".

Для начала своего ознакомления (я уже 2 года в универе на "КБ", но программирование там на нижайшем уровне) я посмотрел курс "Основы ООП C++" канала LOFTBLOG.
Ссылки:
https://vk.com/videos-101965347?section=album_524
https://www.youtube.com/watch?v=A_NTqmCs5Vo

И вот мои два первых проекта по теме "Структуры и перечисления".
1)
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
#include <iostream>
using namespace std;
struct Book{
    int id;
    int pages;
    float cost;
};
int main()
{
    setlocale(0, "");
    Book b1;
    b1.id = 1;
    b1.pages = 150;
    b1.cost = 99.9;
    Book b2 = { 2, 250, 143.5 };
    Book b3;
    b3 = b1;
    b3.pages = 130.5;
    cout << "Id " << b1.id << ", Pages " << b1.pages << ", Cost " << b1.cost << endl;
    cout << "Id " << b2.id << ", Pages " << b2.pages << ", Cost " << b2.cost << endl;
    cout << "Id " << b3.id << ", Pages " << b3.pages << ", Cost " << b3.cost << endl;
    system("pause");
    return 0;
}
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
using namespace std;
 
struct Book{
    int id;
    int pages;
    float cost;
};
 
struct Library{
    Book classic[3];
    Book horror[3];
};
 
int main()
{
    setlocale(0, "");
    Book c1 = { 10, 150, 50 };
    Book c2 = { 20, 100, 45.9 };
    Book c3 = { 30, 240, 120.6 };
    Book h1 = { 40, 230, 23.9 };
    Book h2 = { 50, 430, 100 };
    Book h3 = { 60, 140, 220.4 };
    Library l1 = { { c1, c2, c3 }, { h1, h2, h3 } };
    cout << "Classic" << endl;
    for (int i = 0; i < 3; i++)
    {
        cout << "Book " << i + 1 << endl;
        cout << "Id " << l1.classic[i].id << endl;
        cout << "Pages " << l1.classic[i].pages << endl;
        cout << "Cost " << l1.classic[i].cost << endl << endl;
    }
    cout << "Horror" << endl;
    for (int i = 0; i < 3; i++)
    {
        cout << "Book " << i + 1 << endl;
        cout << "Id " << l1.horror[i].id << endl;
        cout << "Pages " << l1.horror[i].pages << endl;
        cout << "Cost " << l1.horror[i].cost << endl << endl;
    }
    system("pause");
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2016, 19:47
Ответы с готовыми решениями:

Структуры, Объединения, Перечисления
Реализовать программу для хранения информации о студентах одного потока. Предусмотреть следующие...

Приведите пример, как можно связать знания консольного C++ (где алгоритмы, структуры, массивы) с WinAPI?
WinAPI это чтобы взаимодействовать с виндой а вся сложность c++ обучают в консоли Вопрос:как можно...

Упростить Мои Кривые знания по Math
function rewriteValSQL (){ $q = mysql_query(&quot;SELECT GMT,id FROM timezones_public&quot;); while...

Оцените мои знания веб разработчика пожалуйста
Вообщем ситуация такая. Я уже около года занимаюсь веб разработкой, и сейчас хочу попробовать...

C# Структуры и Перечисления
Здравствуйте! Понял как нужно сделать перечисления, но не как не могу подумать как мне сделать...

11
LoSyAsH
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
Завершенные тесты: 2
30.06.2016, 20:47 2
Вот эта строка не очень красивая
C
1
 Library l1 = { { c1, c2, c3 }, { h1, h2, h3 } };
Лучше бы писать вот так
C
1
2
3
4
 Library l1 = { 
        { c1, c2, c3 }, 
        { h1, h2, h3 } 
};
Нам на первом курсе на теме структуры и перечисления сказали написать базу машин. Конечно, мы это делали на базовом уровне, но я немного увлёкся и в итоге получил код на 600 строк. Вот вам main. Ваша задача написать все функции.
Кликните здесь для просмотра всего текста

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
26
27
int main()
{
    setlocale(LC_ALL,"rus");
    base *strPtr=NULL;
    int choice;
    instruction();
    printf("Выберите действие: ");
    scanf("%d",&choice);
    while( choice!=7 )
    {
        switch(choice)
        {
            case  1: InsertItem(&strPtr); break;
            case  2: ChangeItem(&strPtr); break;
            case  3: DeleteItems(&strPtr); break;
            case  4: ShowBase(&strPtr); break;
            case  5: FindItems(&strPtr); break;
            case  6: system("CLS"); instruction(); break;
            default: printf("Invalid choice\n"); menu(); break;
        }
        printf("Выберите действие: ");
        scanf("%d",&choice);
    }
    system("CLS");
    printf("\t\tПока . . . \n");
    getch();
}

И да, я писал это на C, но не думаю, что у вас возникнут проблемы с пониманием
З.Ы. Если интересно, вот мой код.
1
Вложения
Тип файла: rar main.rar (3.9 Кб, 3 просмотров)
LoSyAsH
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
Завершенные тесты: 2
30.06.2016, 21:06 3
Вот эта строка не очень красивая
C
1
 Library l1 = { { c1, c2, c3 }, { h1, h2, h3 } };
Лучше бы писать вот так
C
1
2
3
4
 Library l1 = { 
        { c1, c2, c3 }, 
        { h1, h2, h3 } 
};
--------------------------------------
У вас маленькая программа, поэтому понять, что такое b1,b2 и т.д. не составляет труда, но в больших программах, будете долго вспоминать, что это за b1 такой и зачем вы его вообще добавили.
Очень удобно называть структуру или класс Book, а переменные этого типа называть book ( или book_1 )

Я не знаю, что знаете вы, но на всякий случай скажу. Ф-ции принято называть таким образом setCoordPosition. В начале пишется действие ( в данном случае установка значения ), а затем остальное (причём выделяя каждое слово с Большой буквы).

И ещё. По поводу переменных. В вы практически не ограничены в памяти, так что не смысла сокращать названия ( не только переменных, но вообще всего ). Надо писать так, чтобы любой, кто взглянул на ваш код, понял смысл большей части переменных и ф-ций , например : start_invisible_timer, или даже start_invisible_timer_for_strong_enemy. Уж лучше так, чем invis_timer. Длинно, но зато понятно.
1
alexkrasny
0 / 0 / 3
Регистрация: 07.07.2014
Сообщений: 37
30.06.2016, 22:02  [ТС] 4
Цитата Сообщение от LoSyAsH Посмотреть сообщение
Ваша задача написать все функции.
Приступаю к написанию))
По поводу
Цитата Сообщение от LoSyAsH Посмотреть сообщение
Вот эта строка не очень красивая
понял) Я когда с Java знакомился (был на курсах Epam) приводили такой стиль написания.
Насчет
Цитата Сообщение от LoSyAsH Посмотреть сообщение
Ф-ции принято называть таким образом setCoordPosition.
... Кажется в Java так принято опять же. В C++ очень часто видел как пишут через нижнее почеркивание. Всё таки что выбрать?
С этим
Цитата Сообщение от LoSyAsH Посмотреть сообщение
Очень удобно называть структуру или класс Book, а переменные этого типа называть book ( или book_1 )
у меня всегда проблема. Я иногда не понимаю как назвать тот или иной параметр в методе класса или в функции. Что насчет параметров? Как их называть?

Добавлено через 4 минуты
Цитата Сообщение от LoSyAsH Посмотреть сообщение
base *strPtr=NULL;
Почему NULL, а не nullptr? (уточняю, т.к. был у меня спорный момент с однокурсником, он говорит, что лучше nullptr)
0
30.06.2016, 22:02
nonedark2008
1299 / 961 / 296
Регистрация: 28.07.2012
Сообщений: 2,657
30.06.2016, 22:46 5
Цитата Сообщение от alexkrasny Посмотреть сообщение
Почему NULL, а не nullptr? (уточняю, т.к. был у меня спорный момент с однокурсником, он говорит, что лучше nullptr)
nullptr лучше.
Представим, что в классе есть два конструктора, один принимает скажем int, другой void *.
Если сконструировать объект с NULL, то какой из двух конструкторов вызовется?
2
alexkrasny
0 / 0 / 3
Регистрация: 07.07.2014
Сообщений: 37
30.06.2016, 23:08  [ТС] 6
Объясните, я не знаю(
0
S_el
2315 / 1742 / 369
Регистрация: 15.12.2013
Сообщений: 7,073
30.06.2016, 23:34 7
alexkrasny, будет полезнее самому найти ответ на этот вопрос или выдвинуть свою версию с обоснованием, а вас поправят при необходимости.
0
LoSyAsH
7 / 7 / 9
Регистрация: 22.10.2015
Сообщений: 74
Завершенные тесты: 2
01.07.2016, 00:35 8
Цитата Сообщение от alexkrasny Посмотреть сообщение
Сообщение от LoSyAsH
Ф-ции принято называть таким образом setCoordPosition.
... Кажется в Java так принято опять же. В C++ очень часто видел как пишут через нижнее почеркивание. Всё таки что выбрать?
С этим
Можно и через нижнее подчёркивание, но я редко такое вижу

Цитата Сообщение от alexkrasny Посмотреть сообщение
Почему NULL, а не nullptr?
я только 1 курс закончил, и нам про это не говорили, да и в книге этого тоже не было ( хотя скорее всего книга слишком старая )

Цитата Сообщение от alexkrasny Посмотреть сообщение
у меня всегда проблема. Я иногда не понимаю как назвать тот или иной параметр в методе класса или в функции. Что насчет параметров? Как их называть?
Называйте так, чтобы было понятно, что вы передаёте
Например вот Walls(Texture &t, int X, int Y, int W, int H, Wall_type Wall, string Name, int Health = 1)

Можно делать вот так:
void checkCollisionWithBoard(float Dx, float Dy, float time)
{
...// Так у меня выглядит ф-ция
}

checkCollisionWithBoard(dx, 0, time); // А вот так я её вызываю

В ф-цию я передаю dx
В самой ф-ции использую Dx
0
nonedark2008
1299 / 961 / 296
Регистрация: 28.07.2012
Сообщений: 2,657
01.07.2016, 09:26 9
Цитата Сообщение от LoSyAsH Посмотреть сообщение
я только 1 курс закончил, и нам про это не говорили, да и в книге этого тоже не было
Достаточно написать себе простейший пример, скомпилировать и запустить.

Добавлено через 41 секунду
Все просто, достаточно посмотреть на тип NULL и nullptr.
0
no_attention
27 / 27 / 16
Регистрация: 18.05.2016
Сообщений: 128
01.07.2016, 09:51 10
nonedark2008, проверил, при вызове с NULL происходит конфликт, а с nullptr - void* вызывается, Не объясните, почему так?
0
alexkrasny
0 / 0 / 3
Регистрация: 07.07.2014
Сообщений: 37
01.07.2016, 09:53  [ТС] 11
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Достаточно написать себе простейший пример, скомпилировать и запустить.
И как мне, как новичку, придумать этот пример? Сделаю два указателя: один = NULL, другой = nullptr. И что дальше?
0
no_attention
27 / 27 / 16
Регистрация: 18.05.2016
Сообщений: 128
01.07.2016, 09:54 12
nonedark2008, спасибо, объяснение не нужно, много копать не пришлось. Вот что я нашёл, поправьте, если не прав.

NULL в WinDef.h описан как #define NULL 0.

"Причина введения nullptr в язык С++ заключается в устранение возможных недоразумений между литералом 0 как целочисленным значением и указателем. Двойное значение литерала 0 может вызывать проблемы при некоторых обстоятельствах. Литерал nullptr имеет тип std::nullptr_t, и его нельзя перепутать со значением другого типа. Он может быть неявно преобразован в любой ссылочный тип, но ни в один целочисленный тип, кроме типа bool." - Айвор Хортон, Visual C++ 2010, Глава 4 *примечание.
1
01.07.2016, 09:54
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2016, 09:54

Перечисления и структуры
Опишите функцию Name(G), определяющую имя мужчины из группы G с ростом x. Опишите функцию...

Структуры и перечисления
Вот условия задания: 1. Создать перечисление должностей Vacancies {Manager, Boss, Clerk, Salesman,...

Структуры и перечисления
Поля структуры --------------------------- Фамилия, Имя, Отчество Пол Должность Дата рождения...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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