Что такое класс c
Перейти к содержимому

Что такое класс c

  • автор:

Урок №113. Классы, Объекты и Методы

Хотя язык C++ предоставляет ряд фундаментальных типов данных (например, char, int, long, float, double и т.д.), которых бывает достаточно для решения относительно простых проблем, для решения сложных проблем функционала этих простых типов может не хватать.

Оглавление:

  1. Классы
  2. Методы классов
  3. Примечание о структурах в C++
  4. Заключение
  5. Тест

Классы

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

struct DateStruct

Перечисления и структуры — это традиционный (не объектно-ориентированный) мир программирования, в котором мы можем только хранить данные. В C++11 мы можем создать и инициализировать структуру следующим образом:

DateStruct today < 12 , 11 , 2018 >; // используем uniform-инициализацию

Для вывода даты на экран (что может понадобиться выполнить и не раз, и не два) хорошей идеей будет написать отдельную функцию, например:

struct DateStruct
void print ( DateStruct &date )
std :: cout << date . day << "/" << date . month << "/" << date . year ; DateStruct today < 12 , 11 , 2018 >; // используем uniform-инициализацию
today . day = 18 ; // используем оператор выбора члена для выбора члена структуры
print ( today ) ;

Результат выполнения программы:

В объектно-ориентированном программировании типы данных могут содержать не только данные, но и функции, которые будут работать с этими данными. Для определения такого типа данных в языке C++ используется ключевое слово class. Использование ключевого слова class определяет новый пользовательский тип данныхкласс.

В языке C++ классы очень похожи на структуры, за исключением того, что они обеспечивают гораздо большую мощность и гибкость. Фактически, следующая структура и класс идентичны по функционалу:

struct DateStruct
class DateClass
int m_month ;
int m_year ;

Единственным существенным отличием здесь является public — ключевое слово в классе (о нем мы поговорим детально на соответствующем уроке).

Так же, как и объявление структуры, объявление класса не приводит к выделению какой-либо памяти. Для использования класса нужно объявить переменную этого типа класса:

DateClass today < 12 , 11 , 2018 >; // инициализируем переменную класса DateClass

В языке C++ переменная класса называется экземпляром (или «объектом») класса. Точно так же, как определение переменной фундаментального типа данных (например, int x ) приводит к выделению памяти для этой переменной, так же и создание объекта класса (например, DateClass today ) приводит к выделению памяти для этого объекта.

Методы классов

Помимо хранения данных, классы могут содержать и функции! Функции, определенные внутри класса, называются методами. Методы могут быть определены, как внутри, так и вне класса. Пока что мы будем определять их внутри класса (для простоты), как определить их вне класса — рассмотрим несколько позже.

Класс Date с методом вывода даты:

class DateClass
int m_month ;
int m_year ;
void print ( ) // определяем функцию-член
std :: cout << m_day << "/" << m_month << "/" << m_year ;

Точно так же, как к членам структуры, так и к членам (переменным и функциям) класса доступ осуществляется через оператор выбора членов ( . ):

class DateClass
int m_month ;
int m_year ;
void print ( )
std :: cout << m_day << "/" << m_month << "/" << m_year ; DateClass today < 12 , 11 , 2018 >;

today . m_day = 18 ; // используем оператор выбора членов для выбора переменной-члена m_day объекта today класса DateClass

today . print ( ) ; // используем оператор выбора членов для вызова метода print() объекта today класса DateClass

Результат выполнения программы:

Обратите внимание, как эта программа похожа на вышеприведенную программу, где используется структура. Однако есть несколько отличий. В версии DateStruct нам нужно было передать переменную структуры непосредственно в функцию print() в качестве параметра. Если бы мы этого не сделали, то функция print() не знала бы, какую переменную структуры DateStruct выводить. Нам тогда бы пришлось явно ссылаться на члены структуры внутри функции.

Методы класса работают несколько иначе: все вызовы методов должны быть связаны с объектом класса. Когда мы вызываем today.print() , то мы сообщаем компилятору вызвать метод print() объекта today .

Рассмотрим определение метода print() еще раз:

void print ( ) // определяем метод
std :: cout << m_day << "/" << m_month << "/" << m_year ;

На что фактически ссылаются m_day , m_month и m_year ? Они ссылаются на связанный объект today (который определен caller-ом).

Поэтому, при вызове today.print() , компилятор интерпретирует:

m_day , как today.m_day ;

m_month , как today.m_month ;

m_year , как today.m_year .

Если бы мы вызвали tomorrow.print() , то m_day ссылался бы на tomorrow.m_day .

По сути, связанный объект неявно передается методу. По этой причине его часто называют неявным объектом.

Детально о том, как передается неявный объект методу, мы поговорим на соответствующем уроке. Ключевым моментом здесь является то, что для работы с функциями, не являющимися членами класса, нам нужно передавать данные в эту функцию явно (в качестве параметров). А для работы с методами у нас всегда есть неявный объект класса!

Использование префикса m_ (англ. «m» = «members») для переменных-членов помогает различать переменные-члены от параметров функции или локальных переменных внутри методов класса. Это полезно по нескольким причинам:

во-первых, когда мы видим переменную с префиксом m_ , то мы понимаем, что работаем с переменной-членом класса;

во-вторых, в отличие от параметров функции или локальных переменных, объявленных внутри функции, переменные-члены объявляются в определении класса. Следовательно, если мы хотим знать, как объявлена ​​переменная с префиксом m_ , мы понимаем, что искать нужно в определении класса, а не внутри функции.

Обычно программисты пишут имена классов с заглавной буквы.

Правило: Пишите имена классов с заглавной буквы.

Вот еще один пример программы с использованием класса:

class Employee
std :: string m_name ;
double m_wage ;
// Метод вывода информации о работнике на экран
void print ( )
std :: cout << "Name: " << m_name << "\nId: " << m_id << "\nWage: $" << m_wage << '\n' ; // Определяем двух работников Employee john < "John" , 5 , 30.00 >;
Employee max < "Max" , 6 , 32.75 >;
// Выводим информацию о работниках на экран
john . print ( ) ;
std :: cout << std :: endl ; max . print ( ) ;

Результат выполнения программы:

Name: John
Id: 5
Wage: $30

Name: Max
Id: 6
Wage: $32.75

В отличие от обычных функций, порядок, в котором определены методы класса, не имеет значения!

Примечание о структурах в C++

В языке Cи структуры могут только хранить данные и не могут иметь связанных методов. После проектирования классов (используя ключевое слово class) в языке С++, Бьёрн Страуструп размышлял о том, нужно ли, чтобы структуры (которые были унаследованы из языка Си) имели связанные методы. После некоторых размышлений он решил, что нужно. Поэтому в программах, приведенных выше, мы также можем использовать ключевое слово struct, вместо class, и всё будет работать!

Многие разработчики (включая и меня) считают, что это было неправильное решение, поскольку оно может привести к проблемам, например, справедливо предположить, что класс выполнит очистку памяти после себя (например, класс, которому выделена память, освободит её непосредственно перед моментом уничтожения самого класса), но предполагать то же самое при работе со структурами — небезопасно. Следовательно, рекомендуется использовать ключевое слово struct для структур, используемых только для хранения данных, и ключевое слово class для определения объектов, которые требуют объединения как данных, так и функций.

Правило: Используйте ключевое слово struct для структур, используемых только для хранения данных. Используйте ключевое слово class для объектов, объединяющих как данные, так и функции.

Заключение

Оказывается, Стандартная библиотека C++ полна классов, созданных для нашего удобства. std::string, std::vector и std::array — это всё типы классов! Поэтому, когда вы создаете объект любого из этих типов, вы создаете объект класса. А когда вы вызываете функцию с использованием этих объектов, вы вызываете метод:

Что такое класс c

В С++, и в частности в Borland С++, существует несколько основных расширений по сравнению с С, и одно из них — объектно-ориентированное программирование (ООП). Фундаментальным механизмом ООП является понятие класса. Класс представляет собой объединение (инкапсуляцию) данных и функций, управляющих этими данными. Каждый представитель класса может называться объектом (полем, элементом). Основные свойства класса — наследование и полиморфизм. Описание класса может начинаться со служебного слова class, struct или union. Данные типы классов отличаются от классических структур и объединений тем, что:

— как правило, содержат одну или несколько меток спецификаций доступа (табл. 21), которые задаются с помощью служебных слов: private, public, protected;

— включают в себя элементы (поля) — данные и элементы (поля) — функции (методы);

— как правило, имеются некоторые специальные функции, такие как конструктор (функция с тем же именем, что и класс) и деструктор (функция с тем же именем, что и класс, но со знаком ~).

Элементы-данные и элементы-функции доступны только для элементов-функций этого класса.

Элементы-данные и элементы-функции класса доступны для элементов-функций данного класса, а также других функций программы, в которой имеется представитель этого класса.

Элементы-данные и элементы-функции доступны для элементов функций данного класса и классов, производных от него.

Пример описания классов // Описание структуры Struct First

int getxl(); int getyl();

void setxl(); void setyl(); >; // Описание класса linexy class linexy

linexy(int xx, int yy); ~linexy(); >;

Элементы (поля) класса

Элементы-данные характеризуются следующими положениями:

— они не могут определяться как auto, extern, register;

— элементом данных класса не может быть представитель данного класса;

— элементом-данным могут быть битовые поля, данные перечисляемого типа, представители ранее объявленных классов, указатель и ссылка на пред­ставитель этого класса.

Элемент-функция — это функция, которая определена внутри описания класса. Тело функции может описываться внутри класса, и в этом случае она называется встроенной. Тело функции может описывать и вне класса, тогда в имени функции сначала пишется имя класса, затем операция разрешения ви­димости(::) и далее имя функции и ее параметры.

Читайте также

Тема посвящена разработке программ с использованием побитовых операций, а именно, поразрядных…

Тема посвящена разработке программ с использованием побитовых операций, а именно, поразрядных…

Доступ к элементам или полям класса можно осуществить тремя способами:

Вновь создаваемый класс может наследовать элементы и свойства уже существующих классов.…

Подпишись на нашу группу в контакте и будь в курсе обновлений:

Классы в С++

Классы и объекты в С++ являются основными концепциями объектно-ориентированного программирования — ООП. Объектно-ориентированное программирование — расширение структурного программирования, в котором основными концепциями являются понятия классов и объектов. Основное отличие языка программирования С++ от С состоит в том, что в С нет классов, а следовательно язык С не поддерживает ООП, в отличие от С++.

Чтобы понять, для чего же в действительности нужны классы, проведём аналогию с каким-нибудь объектом из повседневной жизни, например, с велосипедом. Велосипед — это объект, который был построен согласно чертежам. Так вот, эти самые чертежи играют роль классов в ООП. Таким образом классы — это некоторые описания, схемы, чертежи по которым создаются объекты. Теперь ясно, что для создания объекта в ООП необходимо сначала составить чертежи, то есть классы. Классы имеют свои функции, которые называются методами класса. Передвижение велосипеда осуществляется за счёт вращения педалей, если рассматривать велосипед с точки зрения ООП, то механизм вращения педалей — это метод класса. Каждый велосипед имеет свой цвет, вес, различные составляющие — всё это свойства. Причём у каждого созданного объекта свойства могут различаться. Имея один класс, можно создать неограниченно количество объектов (велосипедов), каждый из которых будет обладать одинаковым набором методов, при этом можно не задумываться о внутренней реализации механизма вращения педалей, колёс, срабатывания системы торможения, так как всё это уже будет определено в классе. Разобравшись с назначением класса, дадим ему грамотное определение.

Классы в С++ — это абстракция описывающая методы, свойства, ещё не существующих объектов. Объекты — конкретное представление абстракции, имеющее свои свойства и методы. Созданные объекты на основе одного класса называются экземплярами этого класса. Эти объекты могут иметь различное поведение, свойства, но все равно будут являться объектами одного класса. В ООП существует три основных принципа построения классов:

  1. Инкапсуляция — это свойство, позволяющее объединить в классе и данные, и методы, работающие с ними и скрыть детали реализации от пользователя.
  2. Наследование — это свойство, позволяющее создать новый класс-потомок на основе уже существующего, при этом все характеристики класса родителя присваиваются классу-потомку.
  3. Полиморфизм — свойство классов, позволяющее использовать объекты классов с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Каждое свойство построения классов мы рассмотрим подробно по мере необходимости, а пока просто запомните эти три. А теперь вернёмся к классам, для начала рассмотрим структуру объявления классов.

// объявление классов в С++ class /*имя класса*/ < private: /* список свойств и методов для использования внутри класса */ public: /* список методов доступных другим функциям и объектам программы */ protected: /*список средств, доступных при наследовании*/ >;

Объявление класса начинается с зарезервированного ключевого слова class, после которого пишется имя класса. В фигурных скобочках, строки 3 — 10 объявляется тело класса, причём после закрывающейся скобочки обязательно нужно ставить точку с запятой, строка 10. В теле класса объявляются три метки спецификации доступа, строки 4, 6, 8, после каждой метки нужно обязательно ставить двоеточие. В строке 4 объявлена метка спецификатора доступа private . Все методы и свойства класса, объявленные после спецификатор доступа private будут доступны только внутри класса. В строке 6 объявлен спецификатор доступа public , все методы и свойства класса, объявленные после спецификатора доступа public будут доступны другим функциям и объектам в программе. Пока на этом остановимся, спецификатор доступа protected разбирать сейчас не будем, просто запомните, что он есть. При объявлении класса, не обязательно объявлять три спецификатора доступа, и не обязательно их объявлять в таком порядке. Но лучше сразу определиться с порядком объявления спецификаторов доступа, и стараться его придерживаться. Разработаем программу, в которой объявим простейший класс, в котором будет объявлена одна функция, печатающая сообщение.

// classes.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; // начало объявления класса class CppStudio // имя класса < public: // спецификатор доступа void message() // функция (метод класса) выводящая сообщение на экран < cout >; // конец объявления класса CppStudio int main(int argc, char* argv[]) < CppStudio objMessage; // объявление объекта objMessage.message(); // вызов функции класса message system("pause"); return 0; >

В строках 7 — 14 мы определили класс с именем CppStudio. Имя класса принято начинать с большой буквы, последующие слова в имени также должны начинаться с большой буквы. Такое сочетание букв называют верблюжьим регистром, так как чередование больших и маленьких букв напоминает силуэт верблюда. В теле класса объявлен спецификатор доступа public , который позволяет вызывать другим функциям методы класса, объявленные после public . Вот именно поэтому в главной функции, в строке 19 мы смогли вызвать функцию message() . В классе CppStudio объявлена всего одна функция, которая не имеет параметров и выводит сообщение на экран, строка 12. Методы класса — это те же функции, только объявлены они внутри класса, поэтому всё что относится к функциям актуально и для методов классов. Объявление классов выполняется аналогично объявлению функций, то есть класс можно объявлять в отдельном файле или в главном файле, позже посмотрим как это делается. В строке 18 объявлена переменная objMessage типа CppStudio , так вот, переменная objMessage — это объект класса CppStudio . Таким образом, класс является сложным типом данных. После того как объект класса объявлен, можно воспользоваться его методами. Метод всего один — функция message() . Для этого обращаемся к методу объекта objMessage через точку, как показано в строке 19, в результате программа выдаст текстовое сообщение (см. Рисунок 1).

CppStudio.com

website: cppstudio.com theme: Classes and Objects in C + +

Рисунок 1 — Классы в С++

set — функции и get — функции классов

Каждый объект имеет какие-то свои свойства или атрибуты, которые характеризуют его на протяжении всей жизни. Атрибуты объекта хранятся в переменных, объявленных внутри класса, которому принадлежит данный объект. Причём, объявление переменных должно выполняться со спецификатором доступа private . Такие переменные называются элементами данных. Так как элементы данных объявлены в private , то и доступ к ним могут получить только методы класса, внешний доступ к элементам данных запрещён. Поэтому принято объявлять в классах специальные методы — так называемые set и get функции, с помощью которых можно манипулировать элементами данных. set-функции инициализируют элементы данных, get-функции позволяют просмотреть значения элементов данных. Доработаем класс CppStudio так, чтобы в нём можно было хранить дату в формате дд.мм.гг. Для изменения и просмотра даты реализуем соответственно set и get функции.

// classes.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; class CppStudio // имя класса < private: // спецификатор доступа private int day, // день month, // месяц year; // год public: // спецификатор доступа public void message() // функция (метод класса) выводящая сообщение на экран < cout void setDate(int date_day, int date_month, int date_year) // установка даты в формате дд.мм.гг < day = date_day; // инициализация день month = date_month; // инициализация месяц year = date_year; // инициализация год >void getDate() // отобразить текущую дату < cout >; // конец объявления класса CppStudio int main(int argc, char* argv[]) < setlocale(LC_ALL, "rus"); // установка локали int day, month, year; cout > day; cout > month; cout > year; CppStudio objCppstudio; // объявление объекта objCppstudio.message(); // вызов функции класса message objCppstudio.setDate(day, month, year); // инициализация даты objCppstudio.getDate(); // отобразить дату system("pause"); return 0; >

В определении класса появился новый спецификатор доступа private , строка 9. Данный спецификатор доступа ограничивает доступ к переменным, которые объявлены после него и до начала спецификатора доступа public , строки 9 — 12. Таким образом к переменным day, month, year , могут получить доступ только методы класса. Функции не принадлежащие классу, не могут обращаться к этим переменным. Элементы данных или методы класса, объявленные после спецификатора доступа private , но до начала следующего спецификатора доступа называются закрытыми элементами данных и закрытыми методами класса. Следуя принципу наименьших привилегий и принципу хорошего программирования, целесообразно объявлять элементы данных после спецификатора доступа private , а методы класса — после спецификатора доступа public . Тогда, для манипулирования элементами данных, объявляются специальные функции — get и set . В класс CppStudio мы добавили два метода setDate() и getDate() , подробно рассмотрим каждый метод. Метод setDate() определён с 18 по 23 строки. Как уже ранее упоминалось, set — функции инициализируют элементы данных, поэтому метод setDate() выполняет именно такую функцию. То есть метод setDate() инициализирует переменные day, month, year . Чтобы просмотреть, значения в закрытых элементах данных объявлена функция getDate() , которая возвращает значения из переменных day, month, year в виде даты.На этом определение класса закончено, в main(), как и всегда, создаем объект класса, и через объект вызываем его методы,строки 39 — 41. Если бы элементы данных были объявлены после спецификатора public мы бы смогли к ним обратиться точно также, как и к методам класса. Результат работы программы показан на рисунке 2.

CppStudio.com

Введите текущий день месяц и год! день: 10 месяц: 11 год: 2011 website: cppstudio.comntheme: Classes and Objects in C + + Date: 10.11.2011

Рисунок 2 — Классы в С++

Конструкторы

В предыдущей программе, у класса CppStudio были объявлены элементы данных, которые могут хранить информацию о дате. Когда был создан объект класса, мы сначала вызвали set — функцию, для того, чтобы задать текущую дату (тем самым проинициализировать элементы данных), а потом — вызвали get — функцию и увидели соответствующую дату на экране. Если бы мы сначала вызвали get — функцию, то вместо даты мы бы увидели какие-то числа — мусор. Так вот, при создании объектов, можно сразу же проинициализировать элементы данных класса, выполняет эту функцию конструктор. Конструктор — специальная функция, которая выполняет начальную инициализацию элементов данных, причём имя конструктора обязательно должно совпадать с именем класса. Важным отличием конструктора от остальных функций является то, что он не возвращает значений вообще никаких, в том числе и void . В любом классе должен быть конструктор,даже если явным образом конструктор не объявлен (как в предыдущем классе), то компилятор предоставляет конструктор по умолчанию, без параметров. Доработаем класс CppStudio , добавив к нему конструктор.

// classes.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; class CppStudio // имя класса < private: // спецификатор доступа private int day, // день month, // месяц year; // год public: // спецификатор доступа public CppStudio(int date_day, int date_month, int date_year ) // конструктор класса < setDate(date_day, date_month, date_year); // вызов функции установки даты >void message() // функция (метод класса) выводящая сообщение на экран < cout void setDate(int date_day, int date_month, int date_year) // установка даты в формате дд.мм.гг < day = date_day; // инициализация день month = date_month; // инициализация месяц year = date_year; // инициализация год >void getDate() // отобразить текущую дату < cout >; // конец объявления класса CppStudio int main(int argc, char* argv[]) < CppStudio objCppstudio(11,11,2011); // объявление объекта и инициализация элементов данных objCppstudio.message(); // вызов функции message objCppstudio.getDate(); // отобразить дату system("pause"); return 0; >
// classes.cpp: определяет точку входа для консольного приложения. #include using namespace std; class CppStudio // имя класса < private: // спецификатор доступа private int day, // день month, // месяц year; // год public: // спецификатор доступа public CppStudio(int date_day, int date_month, int date_year ) // конструктор класса < setDate(date_day, date_month, date_year); // вызов функции установки даты >void message() // функция (метод класса) выводящая сообщение на экран < cout void setDate(int date_day, int date_month, int date_year) // установка даты в формате дд.мм.гг < day = date_day; // инициализация день month = date_month; // инициализация месяц year = date_year; // инициализация год >void getDate() // отобразить текущую дату < cout >; // конец объявления класса CppStudio int main(int argc, char* argv[]) < CppStudio objCppstudio(11,11,2011); // объявление объекта и инициализация элементов данных objCppstudio.message(); // вызов функции message objCppstudio.getDate(); // отобразить дату return 0; >

Конструктор объявлен в строках 13 — 16. Конструктор имеет три параметра, через которые он получает информацию о дате, в теле конструктора вызывается set — функция для установки даты. Можно было реализовать начальную инициализацию элементов данных класса и без set — функции, но так как эта функция была предусмотрена, то правильнее будет использовать именно эту функцию, строка 15. В строке 35 объявляем объект класса, причём после имени объекта в круглых скобочках передаём три аргумента. Вот так с помощью конструктора выполняется начальная инициализация элементов данных (см. Рисунок 3).

CppStudio.com

website: cppstudio.com theme: Classes and Objects in C + + date: 11.11.2011

Рисунок 3 — Классы в С++

Объявление класса в отдельном файле

До сих пор объявление класса выполнялось в файле с главной функцией и всё работало. Предположим, необходимо написать какую-то программу, для этого необходимо воспользоваться классом CppStudio — разработанный ранее нами класс. Чтобы воспользоваться этим классом, необходимо подключить файл, в котором он объявлен. Как мы уже говорили, подключение файлов выполняется с помощью препроцессорной директивы #include . Но даже, если мы сможем подключить файл с классом, появится новая проблема — так как в файле с классом уже есть функция main() , то при построении проекта компилятор выдаст ошибку. Суть ошибки: «В проекте найдено несколько main() — функций.» Именно поэтому класс необходимо объявлять в отдельном файле, чтобы его можно было неоднократно использовать. Ранее мы объявляли в отдельном файле функции, таким же образом размещается класс в отдельном файле. Для этого необходимо выполнить 3 шага:

  1. добавить в проект заголовочный файл *.h ;
  2. в заголовочном файле объявить пользовательский класс, в нашем случае — CppStudio ;
  3. подключить заголовочный файл к программе, в нашем случае — #include «CppStudio.h» .

?В зависимости от среды разработки, способы добавления файлов в проект могут отличаться, но суть задачи от этого не меняется. В MVS2010 заголовочный файл можно добавить, вызвав контекстное меню(клик правой кнопкой мыши) в «обозревателе решений«, выбрав пункт «создать новый элемент«. В появившемся диалоговом окне выбираем нужный нам тип файла это *.h и заполняем поле «Имя файла«. Как и прежде, имя выбираем осмысленное, как правило такое же как и имя класса. Теперь к нашему проекту добавлен новый заголовочный файл — CppStudio.h .

В только что созданном заголовочном файле объявляем класс и, если необходимо, подключаем дополнительные заголовочные. Вот, что должно было получиться:

// заголовочный файл CppStudio.h #include using namespace std; // объявление класса class CppStudio // имя класса < private: // спецификатор доступа private int day, // день month, // месяц year; // год public: // спецификатор доступа public CppStudio(int date_day, int date_month, int date_year ) // конструктор класса < setDate(date_day, date_month, date_year); // вызов функции установки даты >void message() // функция (метод класса) выводящая сообщение на экран < cout void setDate(int date_day, int date_month, int date_year) // установка даты в формате дд.мм.гг < day = date_day; // инициализация день month = date_month; // инициализация месяц year = date_year; // инициализация год >void getDate() // отобразить текущую дату < cout >; // конец объявления класса CppStudio

Чтобы главная функция увидела созданный нами класс и смогла его использовать, необходимо включить определение класса в исполняемом файле, с функцией main() . Делается это так:

// classes.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" // подключаем класс CppStudio #include "CppStudio.h" int main(int argc, char*argv[]) < CppStudio objCppstudio(11,11,2011); // объявление объекта и инициализвция элементов данных objCppstudio.message(); // вызов функции message objCppstudio.getDate(); // отобразить дату system("pause"); return 0; >

A, B, C, D, E, F. J, M, S: разбираем европейскую классификацию авто

Европейская классификация автомобилей

Автомобили различают по целому множеству признаков: от типа двигателя и коробки передач до вида кузова и привода. Но есть еще и так называемые классы авто. В этом материале Mafin Media расскажет, что имеют в виду автожурналисты, когда пишут про «семейный B+», и почему Mercedes-Benz C-класс на самом деле D-класс.

От А до S

Знакомые россиянам буквенные классы или сегменты берут начало в Европе. Согласно документации высшего исполнительного органа ЕС — Европейской Комиссии, — автомобили делятся на следующие категории:

A — мини-автомобили;

B — маленькие автомобили;

C — среднеразмерные автомобили;

D — полноразмерные автомобили;

E — автомобили бизнес-класса;

F — представительские автомобили;

S — спортивные купе;

M — минивэны и коммерческие автомобили;

J — кроссоверы и внедорожники.

У этих сегментов нет четких границ ни по объему двигателя, ни по размеру. Однако рынок сумел приспособить градацию под свои нужды, и о принадлежности авто к тому или иному классу можно говорить примерами.

Правда, начать стоит с антипримера: широко известное в России разделение по модельной линейке Mercedes-Benz не всегда попадает «в букву». Современный С-класс по габаритам относится к D-сегменту, в то время как в европейский C-класс просятся Audi A3 Sedan, Toyota Corolla, Hyundai Elantra, Ford Focus, Volkswagen Golf, Skoda Octavia и т. д.

Нередко C-класс называют вымирающим: современные седаны стоят ненамного дешевле растущих в популярности паркетников (SUV). И в целом седаны всех классов плавно «переезжают» в таксомоторные и корпоративные парки и гаражи небольшой консервативной прослойки частников. Но обо всем по порядку.

A-класс

Это маленькие, юркие городские авто с небольшими моторами (чаще объемом от 0,8 до 1,4 л), с механическими, роботизированными либо автоматическими коробками передач и багажниками символических размеров. За пределами крупных городов их обычно не используют. Из продающихся ныне в России малышей позиции держит разве что Kia Picanto и семейство Smart, которых не так давно оставил в одиночестве итальянец Fiat 500.

авто A-класс

B-класс

Такси экономкласса давно заказывали? Renault Logan, Hyundai Solaris, Volkswagen Polo, Skoda Rapid и другие «народные» автомобили — все это B-класс, самый популярный в России. Они достаточно просторны и функциональны для семейного использования, в большинстве своем неприхотливы, но искушенному автолюбителю не дадут ни комфорта, ни динамики, ни особого статуса. Их моторы чаще всего обладают мощностью до 150 л. с. — иногда чуть больше.

авто B-класс

C-класс

Также известен как гольф-класс — дань уважения «отцу-основателю» Volkswagen Golf. Популярные представители уже упоминались: Audi A3 Sedan, Toyota Corolla, Hyundai Elantra, Ford Focus, Volkswagen Gold, Skoda Octavia и другие. Они больше, комфортнее и, разумеется, дороже автомобилей B-класса, но ориентированы в первую очередь на единоличное использование. Потолок мощности таких авто — 200–220 л. с. Хотя бывают и исключения (Audi RS 3, например).

авто C-класс

D-класс

Это полноразмерные седаны и универсалы, представленные в России такими моделями, как Toyota Camry, Skoda Superb, Volkswagen Passat, Audi A4, Ford Mondeo, Mercedes C-class, KIA К5 и Hyundai Sonata.

Такие авто популярны у корпоративных автопарков. Большие габариты дают этим авто еще больше комфорта при движении, а в максимальных комплектациях они могут оснащаться невиданными для того же В-класса опциями: от вентиляции задних сидений до медиасистем, вмонтированных в подголовники передних кресел. Редкий двигатель автомобиля D-класса для российского рынка переступит «налоговый порог» в 249 л. с.

авто D-класс

E-класс

Этот сегмент также именуют бизнес-классом. Популярные представители — Audi A6, Mercedes-Benz E-class, BMW 5-series, Hyundai Genesis G80, Volvo S90. Могут эксплуатироваться как самолично, так и с водителем. Здесь есть где разгуляться: на такие авто могут устанавливаться не только моторы мощностью свыше 400 л. с., но и премиальные опции вроде керамической отделки органов управления, массажеров в сиденьях, активного круиз-контроля, пневмоподвески и системы ночного видения.

авто E-класс

F-класс

Это представительские автомобили, за руль которых хозяева почти не садятся. Они предназначены для того, чтобы давать максимум комфорта и статуса пассажиру, сидящему на заднем кресле, — в таких машинах условно трехместный задний диван чаще всего превращается в два полноценных «VIP»-места с электрорегулировкой положения спинки и подставкой для ног. Строго говоря, машине вовсе не обязательно быть представительской, чтобы претендовать на статус роскошной по оснащению и комфорту, но весь «сок» наработанных автомобилестроением опций обычно вбирают в себя именно представители F-класса. Среди них — BMW 7-й серии, Audi A8, Mercedes-Benz S-класса, Bentley Flying Spur, Rolls Royce Phantom, Lexus LS. Такие машины могут предложить совсем редкие для рынка опции. Например, пуленепробиваемый кузов или охлаждаемые ящики для шампанского. Поскольку такие авто весят больше 2 000 кг, их моторы традиционно обладают высокой мощностью — от 250 л. с.

авто F-класс

S-класс

S — от слова «спорт». Под этот класс подпадают любые спортивные (конечно, не в истинно гоночном смысле) купе. Например, Mercedes-Benz AMG GT, BMW M4, Audi TT, Audi R8, Lamborghini huracan, Porsche 911 и другие двухдверные версии стандартных модельных линеек (Audi A5, BMW M2, Mercedes-Benz E-класс coupe). Такие автомобили сделаны для водителя: они мощные (от 300 и больше л. с.), обременительные в содержании и неповторимые в способности дарить владельцу эмоции от вождения.

 авто S-класс

M-класс

Это минивэны и коммерческие фургоны всех мастей: от скромной LADA Largus и сравнительно бюджетного Kia Carnival до всемирно известного Volkswagen Caravelle и премиального Mercedes-Benz V-класс. Имеющие семь и больше мест, они отлично подходят для большой семьи или групповых перевозок. На их базе часто делают кемпинговые авто, способные превращаться из фургона в полноценный дом на колесах. На них редко ставятся моторы мощнее 300 л. с., так как динамических характеристик от фургончиков никто, кроме клиентов тюнинг-ателье, как правило, не ждет.

авто M-класс

J-класс

Даже самые опытные российские эксперты автомобильного мира подчас называют джипом все, что имеет полный привод и увеличенный клиренс. На самом же деле к джипам правильно относить только автомобили американской марки Jeep.

В то же время к классу J как раз относится все, что имеет повышенную проходимость. Последняя может быть обеспечена как полным приводом и раздаточной коробкой, так и слегка увеличенным дорожным просветом у моноприводного универсала. Столь же велик здесь и разброс остальных характеристик, поэтому ограничимся известными примерами представителей класса: Jeep Wrangler, Volkswagen Touareg, Kia Sportage, Hyundai Tucson и. советская классика УАЗ-469, прозванная козликом за жесткую подвеску и появившаяся задолго до утверждения европейской «автомобильной сегрегации».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *