Классы. Приветствую! Сейчас поговорим о классах. Я решил прерваться с написанием и переводом туториалов про HGE на некоторое время, ибо у меня померла операционная система и я, уставший от глюков Windows решил поставить Linux. Когда разберусь с HGE под линуксами, продолжу писать. Теперь же коснемся объектного стиля программирования, который мне очень нравится, и надеюсь, что понравится и вам. Итак, класс состоит из объявления и определения. Оные, как правило, происходят в разных файлах. Как пример возьмем класс human и представим, что мы заполняем карточку (любую, медицинскую, учетную, как хотите...) о человеке. Давайте объявим наш класс:
#ifndef HUMAN_H
#define HUMAN_H
class human
{
public:
human();
~human();
void setFirstName(std::string newFirstName);
void setLastName(std::string newLastName);
void setWeight(int newWeight);
void setAge(int newAge);
std::string getFirstName();
std::string getLastName();
int getWeight();
int getAge();
private:
std::string firstName;
std::string lastName;
int weight;
int age;
};
#endif /* HUMAN_H */
Разбираю код: - Блоки IFNDEF-DEFINE-ENDIF - это защита от повторных включений.
- human(); - это конструктор класса. Он задает начальные параметры членов при создании экземпляра класса.
- ~human(); - это деструктор класса. Он уничтожает класс после использования.
- Остальное - это члены класса. В секции PUBLIC только функции, которые будут работать с классом, а в секции PRIVATE - данные-члены, с которыми мы будем работать.
Исходя из этого заключите: у каждого правильного класса должен быть конструктор и деструктор. Теперь разберем определение: #include <iostream>
#include <string>
#include "human.h"
human::human()
{
firstName = "";
lastName = "";
weight = 0;
age = 0;
}
human::~human() {}
void human::setFirstName(std::string newFirstName)
{
firstName = newFirstName;
}
void human::setLastName(std::string newLastName)
{
lastName = newLastName;
}
void human::setWeight(int newWeight)
{
weight = newWeight;
}
void human::setAge(int newAge)
{
age = newAge;
}
std::string human::getFirstName()
{
return firstName;
}
std::string human::getLastName()
{
return lastName;
}
int human::getWeight()
{
return weight;
}
int human::getAge()
{
return age;
}
Это простой код, который не требует объяснения. Он реализует конструктор, деструктор и функции класса. Исходя из этого заключите: каждый правильный класс должен иметь свое определение. Теперь посмотрим на главный файл. Предупреждаю, кода в нем ОЧЕНЬ МНОГО:
#include <iostream>
#include <string>
#include "human.h"
using namespace std;
human TestHuman;
int choice;
string inFirstName;
string inLastName;
int inWeight;
int inAge;
int cont = 1;
void setHumanFirstName()
{
cout << "Введите имя человека: ";
cin >> inFirstName;
TestHuman.setFirstName(inFirstName);
cout << endl;
return;
}
void setHumanLastName()
{
cout << "Введите фамилию человека: ";
cin >> inLastName;
TestHuman.setLastName(inLastName);
cout << endl;
return;
}
void setHumanWeight()
{
cout << "Введите вес человека: ";
cin >> inWeight;
TestHuman.setWeight(inWeight);
cout << endl;
return;
}
void setHumanAge()
{
cout << "Введите возраст человека: ";
cin >> inAge;
TestHuman.setAge(inAge);
cout << endl;
return;
}
void getHumanFirstName()
{
cout << "Имя: " << TestHuman.getFirstName() << endl;
cout << endl;
return;
}
void getHumanLastName()
{
cout << "Фамилия: " << TestHuman.getLastName() << endl;
cout << endl;
return;
}
void getHumanWeight()
{
cout << "Вес: " << TestHuman.getWeight() << endl;
cout << endl;
return;
}
void getHumanAge()
{
cout << "Возраст: " << TestHuman.getAge() << endl;
cout << endl;
return;
}
void getAllHumanParameters()
{
cout << "Имя: " << TestHuman.getFirstName() << endl;
cout << "Фамилия: " << TestHuman.getLastName() << endl;
cout << "Вес: " << TestHuman.getWeight() << endl;
cout << "Возраст: " << TestHuman.getAge() << endl;
cout << endl;
return;
}
void exit()
{
cont = 0;
return;
}
int main(int argc, char ** argv)
{
do
{
cout << "Класс Человек. Написал Кулхацкер. Версия 1.0" << endl;
cout << "--------------------------------------------" << endl;
cout << "1) Задать имя" << endl;
cout << "2) Задать фамилию" << endl;
cout << "3) Задать вес" << endl;
cout << "4) Задать возраст" << endl;
cout << "--------------------------------------------" << endl;
cout << "5) Вывести имя" << endl;
cout << "6) Вывести фамилию" << endl;
cout << "7) Вывести вес" << endl;
cout << "8) Вывести возраст" << endl;
cout << "9) Вывести все" << endl;
cout << "--------------------------------------------" << endl;
cout << "0) Выйти" << endl;
cout << "--------------------------------------------" << endl;
cout << "> ";
cin >> choice;
switch(choice)
{
case 1:
setHumanFirstName();
break;
case 2:
setHumanLastName();
break;
case 3:
setHumanWeight();
break;
case 4:
setHumanAge();
break;
case 5:
getHumanFirstName();
break;
case 6:
getHumanLastName();
break;
case 7:
getHumanWeight();
break;
case 8:
getHumanAge();
break;
case 9:
getAllHumanParameters();
break;
case 0:
exit();
break;
}
} while(cont != 0);
return 0;
}
Здесь мы реализуем основной код программы. К слову говоря, его можно сократить, но я старался показать КАК МОЖНО это реализовать, а не КАК КРАСИВО это реализовать. В общем, вот такая статья про классы. Удачи и спасибо за внимание!
|