§ 22. Тып даных клас (class)

22.1. Паняцце класа

Мова праграміравання C++ мае вялікую колькасць розных тыпаў і структур даных (напрыклад: char, int, double, vector, list і г. д.), якіх дастаткова для рашэння адносна простых задач. Аднак для рашэння больш складаных праблем функцыяналу гэтых тыпаў можа не хапіць.

У С++ ёсць магчымасць вызначаць уласныя тыпы даных, якія будуць ужывацца для рашэння пэўнай задачы. Вы ўжо стваралі структуры, якія могуць выкарыстоўвацца для стварэння ўласных карыстальніцкіх тыпаў даных.

Структуры — гэта традыцыйны спосаб уяўлення складаных тыпаў даных, характэрны для парадыгмы структурнага праграміравання.

У аб’ектна-арыентаваным праграміраванні[1] тыпы даных могуць змяшчаць не толькі даныя, але і функцыі, якія могуць працаваць з гэтымі данымі. Такім тыпам даных з’яўляецца клас.


[1] З прынцыпамі аб’ектна-арыентаванага праграміравання вы пазнаёміцеся ў 11-м класе.  

У мове C структуры могуць толькі захоўваць даныя і не могуць мець метадаў для іх апрацоўкі. У C++, пасля праектавання класаў (выкарыстоўваючы ключавое слова class), Б’ёрн Страуструп разважаў пра тое, ці трэба, каб структуры (якія былі ўнаследаваны з мовы С) мелі звязаныя функцыі-члены. Пасля некаторых разважанняў ён вырашыў, што трэба. Таму сёння структуры і класы ў С++ маюць больш падабенства, чым адрозненняў.

Шмат якія распрацоўшчыкі лічаць, што такое рашэнне не было правільным, паколькі яно можа прывесці да рэальных праблем (напрыклад, з вылучэннем і ачысткай памяці). Таму рэкамендуецца выкарыстоўваць ключавое слова struct для структур, якія ўжываюцца толькі для захоўвання даных, і ключавое слова class для апісання аб’ектаў, якія патрабуюць аб’яднання даных, і метадаў іх апрацоўкі.