Начиная изучать классы, мы подошли к важному этапу – изучению объектно-ориентированного программирования (ООП) в C++ . Класи – довольно обширная тема. Поэтому я разобью её на несколько частей. Таким образом, початківцям буде досить просто освоїти інформацію і розібратися з основами цієї теми.
В даному уроці ми познайомимося з синтаксисом класів C ++, зі специфікаторами доступу до членів (полям) класса (private і public). Узнаем, що таке методи класу і як звертатися до членів класу з програми.
Классы 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 | #include <iostream> using namespace std; class Number { private: int number; public: void setNumber() { cout << "Введите число: "; cin >> number; } void getNumber() { cout << number << endl; } }; int main() { setlocale(LC_ALL, "rus"); Number object; object.setNumber(); object.getNumber(); return 0; } |
У рядках 4 – 19 находится определение класса. Щоб оголосити клас треба використовувати ключове слово class и дать ему имя. В фигурных скобках описать его и, в конце поставить ; крапку з комою.
После объявления имени класса, оно становится именем нового типа данных. С этим типом будут создаваться объекты класса.
В теле класса (между фигурными скобками) могут находиться данные (змінні базових типів і рядки ), функции, принадлежащие классу, структуры, классы… Все це частіше називають членами або полями класу. Функции, которые объявлены и/или определены в теле класса – это методы класса. Далее так их и будем называть. Просто надо запомнить: методы класса – это функции, спеціально створені для роботи з даними (членами) этого класса.
Рассмотрим новые для вас ключевые слова – private і public. В С ++ прийнято захищати деякі дані класу від зовнішнього втручання. Тобто, чтобы из главной функции, например, никто не мог напрямую обратиться к этим данным через объект и внести какие-либо изменения.
Чтобы сделать данные “закрытыми” надо разместить их в поле private . По умолчанию, всё что объявлено в классе, становится закрытым от прямого доступа и доступно только для других членов или методов класса. Так что, если такие данные объявляются в самом верху тела класса, слово private можна не використовувати.
Щоб оголосити відкриті члени класу, надо применить ключевое слово public. У цьому полі часто знаходяться методи класу, которые и будут работать с приватными (закрытыми) данными. Публичные (открытые) методы и другие члены класса доступны из любой другой части кода/программы, в якій визначено клас. Іноді для роботи вам можливо знадобиться оголосити публічний член класу або приватний метод.
Обратите внимание на определение методов класса. Мы не передаем в них параметры. При цьому вносимо зміну в зміннуnumber і показуємо її на екран. Справа в тому, що члени і методи класу знаходяться в одній області видимості. И методы класса свободно обращаются к данным-членам класса.
В нашем коде мы разместили определение методов прямо в теле класса, так як визначення займає дуже мало місця. Но чаще придётся выносить его за пределы тела класса или даже в другой файл, а в самом классе оставлять только прототипы методов. Посмотрите, как выглядит определение методов вне класса:
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 | #include <iostream> using namespace std; class Number { private: int number; public: void setNumber(); //прототипы void getNumber(); }; //~~~~~~~~~~~~~~~~~~~~~~~~~ void Number::setNumber() { cout << "Введите чиcло: "; cin >> number; } //~~~~~~~~~~~~~~~~~~~~~~~~~ void Number::getNumber() { cout << number << endl; } int main() { setlocale(LC_ALL, "rus"); Number object; object.setNumber(); object.getNumber(); return 0; } |
Чтобы указать, что функция, определенная вне класса, является именно его методом, надо как-то связать имя класса с именем этого метода. Для этого пишем сначала тип возвращаемого значения, затем имя класса, далі операцію розширення області видимості :: (двойное двоеточие), имя метода и скобки (с параметрами или без): void номер::setNumber() потім, как обычно, следует определение тела функции в фигурных скобках.
Методы, певні в класі, за замовчуванням єinline-функціями (встроенными функциями) в отличии от методов, определённых вне класса.
Так как класс – это некий тип, определённый программистом, то створивши клас ми можемо створювати об'єкти цього типу: номер об'єкт; Як ми обговорили раніше, мы не сможем обратиться к приватным членам класса из главной функции. Но мы легко можем с ними работать, через определённые методы класса. Так викликаємо ці методи через об'єкт і спочатку присвоюємо змінноїnumber значение, а затем показываем на экран.
Для первого вводного урока, информации будет достаточно. Наступний урок буде містити завдання на класи, для того, чтобы вы могли закрепить полученные знания. Задание для вас – до переходу до вирішення завдань, посмотреть видео-урок.
Десь (або тут в описах класів, або раніше, в описах структур) потрібно б сказати, що структури, успадкування dostavshiesya C ++, ніж C, і класи – це одне і теж.
Тільки за замовчуванням для всіх членів структури область видимості визначена як public, а в класах – як private. Тому ми в класах завжди переобумовленої видимість якихось членв (public, захищений) – знизу вгору, від меншого (private) до більшого (public, захищений). А в структурах в цьому просто не виникає необхідність – зверху вниз.
Але структури C ++, на відміну від структур C, через таку дуальності (з класами) можуть також мати свої власні функції-методи.
на відео уроці, може кому-то буде корисно , не всі компілятори розумні , як у Дениса Маркова. У мене наприклад потрібно було додавати покажчик this-> щоб аварійної ситуації не було . Ще дуже мало завдань за темами, у вас на початку так добре все було, отримав інформацію-отримай і завдання по ній: а зараз вивчи і зрозумій купа інформації(не легкою)а потім вже переходь до задачі.
#include
#include
using namespace std;
ЬурейеЕ непідписаних Int ш;
клас accaunt
{
private:
символ * ID;
символ * Ім'я;
щ баланс;
public:
accaunt(void);
недійсним SETID(char*);
char * GetId();
недійсний SetName(char*);
символ * GetName();
~ accaunt(void);
цибуля getbalance();
недійсний setbalance(щ);
};
accaunt::accaunt()
{
}
accaunt::~ accaunt()
{
}
недійсним accaunt::SETID(символ * ідентифікатор)
{
this->ID = ідентифікатор;
};
char * accaunt::GetId()
{
повернення ID;
}
недійсним accaunt::SetName(символ * Ім'я)
{
this->Name = Ім'я;
}
char * accaunt::GetName()
{
повернення Ім'я;
}
хто accaunt::getbalance()
{
повернення балансу;
}
недійсним accaunt::setbalance(б щ)
{
this->Баланс = Ь;
}
int main()
{
setlocale(LC_ALL, “rus”);
accaunt;
a.setbalance(123);
a.setid(“444”);
a.setname(“Де”);
cout << a.getbalance() << endl;
cout << a.getname() << endl;
cout << a.getid() << endl;
cin.get();
return 0;
}
7f835p