Содержание:
Структуры в C++
Структуры — специальный (агрегатный ) тип данных, который может содержать в себе разнотипные элементы. В С++ возможно два стиля объявления структур: одно — характерное для языка C, другое — для C++.
Рассмотрим вариант синтаксиса именно для языка C++:
struct Name { type atribute; // остальные элементы структуры } structureVar1, structureVar2, ...; |
здесь:
struct
— определение структуры начинается с данного ключевого словаName
— имя структурыtype
— тип данных, который имеет элемент структурыatribute
— сам элемент структурыstructureVar1-2
— переменные структурны
- Создайте консольной приложение.
- Напишите следующий исходный код:
#include "stdafx.h" #include using namespace std; // Объявление структуры. struct MYSTRUCTURE { char sName[100]; int iAge; }; void main(void) { MYSTRUCTURE MyStructure; // объявляем переменную MyStructure типа MYSTRUCTURE strcpy(MyStructure.sName, "Ivan" ); // копируем строку 'Ivan' в элемент данных MyStructure.sName MyStructure.iAge = 13; cout << "Меня зовут "; cout << MyStructure.sName; cout << " я являюсь "; cout << MyStructure.iAge; cout << " лет." << endl; system ("pause"); } |
В данной программе типу структуры присвоено имя MYSTRUCTURE. После чего следует собственно определение структуры, заключенное в фигурные скобки.
Элементами данных структуры являются: Строка sName и целое iAge
Программирование с++ классы
Основные понятия:
Группу студентов можно представить, как класс языка C++. Классы в программировании состоят из свойств и методов. Свойства — это любые данные-характеристики объекта класса. В нашем примере студент — объект класса, а его свойства — имя, фамилия, оценки и средний балл. Методы — это функции, которые могут выполнять какие-либо действия над данными (свойствами) класса.
Модификаторы доступа public и private
Все свойства и методы классов имеют права доступа. По умолчанию в созданном классе все его содержимое является доступным для чтения и записи только для него самого. Модификатор доступа public необходим для того, чтобы разрешить доступ к данным класса извне. Все функции и переменные, которые находятся после модификатора public, становятся доступными из всех областей программы.
Недоступные (приватные) для общего пользования данные класса размещаются после модификатора доступа private. Если отсутствует модификатор public, то все функции и переменные, по умолчанию являются закрытыми.
Обычно, закрытыми делают все свойства класса, а публичными — его методы. Все действия с закрытыми свойствами класса реализуются через его методы.
Выполнение:
- Создайте заголовочный файл students.h, в котором будет находиться класс Students: меню Проект → Заголовочный файл (.h).
Описание будущего кода:
В нашем случае, объектом класса является студент, а его свойствами — имя, фамилия, оценки и средний балл.
У каждого студента есть имя — name и фамилия last_name . Также, у него есть промежуточные оценки за весь семестр. Эти оценки мы будем записывать в целочисленный массив из пяти элементов. После того, как все пять оценок будут проставлены, определим средний балл успеваемости студента за весь семестр — свойство sred_ball.
Добавим в наш класс функцию calculate_sred_ball(), которая будет определять средний балл успеваемости ученика.
- Добавьте в созданный файл код:
/* students.h */ #include using namespace std; class Students{ public: // Установка имени студента void set_name(string student_name) { name = student_name; } // Получение имени студента string get_name() { return name; } // Установка фамилии студента void set_last_name(string student_last_name) { last_name = student_last_name; } // Получение фамилии студента string get_last_name() { return last_name; } // Установка промежуточных оценок void set_scores(int student_scores[]) { for (int i = 0; i < 5; i++){ scores[i] = student_scores[i]; } } // Установка среднего балла void set_sred_ball(float ball) { sred_ball = ball; } // Получение среднего балла float get_sred_ball() { return sred_ball; } private: // Промежуточные оценки int scores[5]; // Средний балл float sred_ball; // Имя string name; // Фамилия string last_name; }; |
Таким образом, нельзя напрямую обращаться к закрытым данным класса. Осуществлять работу с этими данными можно только посредством методов (функций) этого класса. В приведенном выше примере используется функция get_sred_ball() для получения средней оценки студента, и set_sred_ball() для выставления этой оценки.
Функция set_sred_ball() воспринимает средний балл в качестве параметра и присваивает его значение закрытой переменной sred_ball.
Функция get_sred_ball() просто возвращает значение этой переменной.
- Теперь в главный файл проекта добавьте следующее содержимое:
/* main.cpp */ #include "stdafx.h" #include "students.h" using namespace std; bool score_is_valid (int test_score) { if (test_score <= 5 && test_score > 0) // оценка от 1 до 5 return true; else return false; } int main() { SetConsoleCP(1251);// использование кирилицы SetConsoleOutputCP(1251); // использование кирилицы // Создание объекта класса Student Students student; string name; string last_name; // Ввод имени с клавиатуры cout << "Name: "; getline (cin, name); // Ввод фамилии cout << "Last name: "; getline (cin, last_name); // Сохранение имени и фамилии в объект класса Students student.set_name(name); student.set_last_name(last_name); int scores[5]; // Оценки int sum = 0; // Сумма всех оценок // Ввод промежуточных оценок for (int i = 0; i < 5; i++){ cout << "Grade " << i+1 << ": "; do { cin >> scores[i]; if (score_is_valid(scores[i])) { sum += scores[i]; break; } else { cout << "Make correct input. Grade " << i+1 << ": "; } } while (true); } // Сохраняем промежуточные оценки в объект класса Student student.set_scores(scores); // Считаем средний балл float sred_ball = sum / 5.0; // Сохраняем средний балл в объект класса Students student.set_sred_ball(sred_ball); // Выводим данные по студенту cout << "Average grade of student " << student.get_name() << " " << student.get_last_name() << " equal: " << student.get_sred_ball() << endl; system("pause"); return 0; } |
В начале программы определяется объект класса Students. Нужно понимать, что сам класс является только описанием его объекта. Так, класс Students является описанием любого из студентов, у которого есть имя, фамилия и возможность получения оценок.
Теперь об объекте созданного класса. Объект класса Students характеризует уже конкретного студента. Если стоит задача выставить оценки всем ученикам в группе, то необходимо создавать новый объект для каждого из них. Использование классов очень хорошо подходит для описания объектов реального мира.
После того, как объекта student создан, вводится с клавиатуры фамилия, имя и промежуточные оценки для конкретного ученика. Пусть это будет Иван Иванов, у которого есть пять оценок за семестр — две тройки, две четверки и одна пятерка.
Введенные данные передаются set-функциям, которые присваивают их закрытым переменным класса. После введения промежуточных оценок высчитывается средний балл на основе этих оценок, а затем сохраняется это значение в закрытом свойстве sred_ball, с помощью функции set_sred_ball().