Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет по лаборатор работе №2

.pdf
Скачиваний:
20
Добавлен:
15.03.2015
Размер:
292.48 Кб
Скачать

Лабораторная работы №2. (вариант 6)

Конструирование простейшего класса

Цель работы : знакомство с основными понятиями ООП. Необходимо выполнить конструирование класса, предназначенного для хранения заданной структуры данных, изучить способы создания объектов.

Основные понятия: класс, объект, свойство, метод, конструктор, деструктор, полиморфизм, инкапсуляция

Нам необходимо сконструировать класс с заданным набором свойств в соответствии с нашим вариантом. Мы должны добавить несколько методов, которые позволят нам просмотреть и отредактировать значения любого из свойств.

Свойства класса : марка машины, мощность двигателя, объем бака, цвет кузова.

Цель: определить самую мощную машину

Выставлены определенные требования к конструированию класса – доступ к свойствам – закрытый, к методам – открытый. В классе следует предусмотреть конструктор с параметрами и конструктор по умолчанию.

Программа должна выполнять следующие действия:

1.Создание объекта с помощью конструктора по умолчанию

2.Создание объекта с помощью конструктора с параметрами.

3.Создание массива объектов.

4.Редактирование и просмотр свойств каждого объекта.

Ввод исходных данных предлагается осуществить с клавиатуры, вывод результатов – на экран.

1.Создаваемая нами программа содержит один класс

class Сar{…};

Этот класс предназначен для хранения информации

о машинах, а также

средства для обработки этой информации.

2. Программа содержит еще одну функцию void maxpower(Car *, int); Функция определяет машину с самым мощным двигателем.

1

Программа состоит из нескольких компонентов. Одним из таких компонентов являются файлы. Мы разделили программу на три файла : 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(std::string val); int GetPower();

void SetPower(int val); int GetVolume();

void SetVolume(int val); string Car::GetColor();

void SetColor(std::string val); private:

string Mark; int Power; int Volume; string Color;

};

void maxpower(Car*, int);

#endif

/* _MODULE_H */

____________________________________________________________

2

Файл “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].GetName()<<")"<<endl;

return 0;

}

Car::Car() {

// конструктор по умолчанию

}

// конструктор с параметрами

Car::Car(string mrk, int pwr, int vlm, string clr) { Name=mrk;

Power=pwr;

Volume=vlm;

Color=clr;

}

Car :: ~Car() {

//деструктор по умолчанию – у нас явно в программе не вызывается,

//его можно в класс не включать

}

string Car::GetName() { return(Name);

}

void Car::SetName(string val) { Name=val;

}

3

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 argc, char** argv) { int k;

Car C1; // вызов конструктора по умолчанию

Car C2("Toyota", 130, 50, "Green"); // вызов конструктора с параметрами C1.SetMark("Nissan");

C1.SetPower(150);

C1.SetVolume(60);

C1.SetColor("Red");

cout<<C1.GetMark()<<" "<<C1.GetPower()<<" "<<C1.GetVolume()<<" "<<C1.GetColor()<<endl;

4

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;

}

Диаграмма файлов(компонентов ) проекта

main.cpp

 

func.cpp

 

 

 

module.h

Замечания

Объект = данные + операции(методы)

5

ООП – это способ организации наших знаний. В программировании используется для определения модели вычислений, то есть способа структурирования информации, организации вычислений и данных.

Класс – это тип данных, определяемый пользователем.. Класс является моделью реального объекта в виде данных и функций для работы с этими данными.

Данные класса – это поля Функции класса – это методы.

Видимость элементов класса управляется спецификаторами доступа – public (описывает интерфейс класса) и private.( видимость только внутри класса).

Доступ к элементам объекта такой же как к полям структуры.( используется операция

.(точка) при обращении к элементу через имя объекта, или операция -> при обращении через указатель. Это касается только обращения к элементам со спецификатором public. Получить или изменить значения элементов со спецификатором private можно только через обращение к соответствующим методам.

6