Лабораторная работы №2. (вариант 6)
Конструирование простейшего класса
Цель работы : знакомство с основными понятиями ООП. Необходимо выполнить конструирование класса, предназначенного для хранения заданной структуры данных, изучить способы создания объектов.
Основные понятия: класс, объект, свойство, метод, конструктор, деструктор, полиморфизм, инкапсуляция
Нам необходимо сконструировать класс с заданным набором свойств в соответствии с нашим вариантом. Мы должны добавить несколько методов, которые позволят нам просмотреть и отредактировать значения любого из свойств.
Свойства класса : марка машины, мощность двигателя, объем бака, цвет кузова.
Цель: определить самую мощную машину
Выставлены определенные требования к конструированию класса – доступ к свойствам – закрытый, к методам – открытый. В классе следует предусмотреть конструктор с параметрами и конструктор по умолчанию.
Программа должна выполнять следующие действия:
-
Создание объекта с помощью конструктора по умолчанию
-
Создание объекта с помощью конструктора с параметрами.
-
Создание массива объектов.
-
Редактирование и просмотр свойств каждого объекта.
-
Обработка массива объектов в соответствии с заданием лабораторной работы №1. Ввод исходных данных осуществляется с клавиатуры, вывод – на экран.
1.Создаваемая нами программа содержит один класс class Сar{…};
Этот класс предназначен для хранения информации о машинах, а также средства для обработки этой информации.
2. Программа содержит еще одну функцию int maxpower(Car *, int);
Функция определяет машину с самым мощным двигателем.
Программа состоит из нескольких компонентов. Одним из таких компонентов являются файлы. Мы разделили программу на три файла : main.cpp (файл, в котором хранится главная функция), func.cpp(файл, в котором определены методы класса и внешняя по отношению к классу функция) и, наконец, файл module .h, в котором находятся объявление класса и прототип внешней по отношению к классу функции.
Текст программы:
Файл “Module.H”
#ifndef _MODULE_H //страж включения
#define _MODULE_H
#include <stdlib.h>
#include <iostream>
using namespace std;
// объявление класса
class Car {
public:
Car();
Car(string mrk, int pwr, int vlm, string clr);
~Car();
string Car::GetMark();
void SetMark(string val);
int GetPower();
void SetPower(int val);
int GetVolume();
void SetVolume(int val);
string Car::GetColor();
void SetColor(string val);
private:
string Mark;
int Power;
int Volume;
string Color;
};
int maxpower(Car*, int);
#endif /* _MODULE_H */
____________________________________________________________
Файл “func.Cpp”
// реализация внешней целевой функции и функций – членов класса (методов)
#include "module.h"
// целевая, внешняя по отношению к классу функция
int maxpower (Car*c, int n) {
int i, max=0, maxnumber=0;
for(i=0; i<n; i++) {
if(c[i].GetPower()>max) {
max=c[i].GetPower();
maxnumber=i;
}
}
cout<<"Car with maximum power is number "<<maxnumber+1<<" ("<<c[maxnumber].GetMark()<<")"<<endl;
return 0;
}
Car::Car() {
// конструктор по умолчанию
}
// конструктор с параметрами
Car::Car(string mrk, int pwr, int vlm, string clr) {
Mark =mrk;
Power=pwr;
Volume=vlm;
Color=clr;
}
Car :: ~Car() {
// деструктор по умолчанию – у нас явно в программе не вызывается,
// его можно в класс не включать
}
string Car::GetMark() { //Метод, позволяющий прочитать значение свойства
return(Mark);
}
void Car::SetMark(string val) { // Метод для установки нового значения
Mark=val; // свойства
}
int Car::GetPower() {
return(Power);
}
void Car::SetPower(int val) {
Power=val;
}
int Car::GetVolume() {
return(Volume);
}
void Car::SetVolume(int val) {
Volume=val;
}
string Car::GetColor() {
return(Color);
}
void Car::SetColor(string val) {
Color=val;
}
Файл “main.Cpp”
// главная программа, использующая класс
#include "module.h"
int main() {
int k;
Car C1; // вызов конструктора по умолчанию
Car C2("Toyota", 130, 50, "Green"); // вызов конструктора с параметрами
C1.SetMark("Nissan"); // Обращаемся к элементам объекта
C1.SetPower(150); // через имя объекта, поэтому используем
C1.SetVolume(60); // точку (.).Получить или изменить значение
C1.SetColor("Red"); // элемента со спецификатором private можно
// только через обращение к соответствующим
// методам (SetVolume, SetColor и др.)
cout<<C1.GetMark()<<" "<<C1.GetPower()<<" "<<C1.GetVolume()<<" "<<C1.GetColor()<<endl;
cout<<C2.GetMark()<<" "<<C2.GetPower()<<" "<<C2.GetVolume()<<" "<<C2.GetColor()<<endl;
Car C3[10];
string str1, str2;
int val1, val2;
cout<<"Vvedite kol-vo elementov -> ";
cin>>k;
for(int i=0; i<k; i++) {
cout<<"Enter mark -> ";
cin>>str1;
C3[i].SetMark(str1);
cout<<"Enter power -> ";
cin>>val1;
C3[i].SetPower(val1);
cout<<"Enter volume -> ";
cin>>val2;
C3[i].SetVolume(val2);
cout<<"Enter color -> ";
cin>>str2;
C3[i].SetColor(str2);
}
for(int i=0; i<k; i++) cout<<C3[i].GetMark()<<" "<<C3[i].GetPower()<<" "<<C3[i].GetVolume()<<" "<<C3[i].GetColor()<<endl;
maxpower(C3,k);
return 0;
}