ТОП 10:

Принципы построения классов.



В ООП существует три основных принципа построения классов:

1. Инкапсуляция — это свойство, позволяющее объединить в классе и данные, и методы, работающие с ними и скрыть детали реализации от пользователя.

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

3. Полиморфизм — свойство классов, позволяющее использовать объекты классов с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

рассмотрим структуру объявления классов.

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

При объявлении класса, не обязательно объявлять три спецификатора доступа, и не обязательно их объявлять в таком порядке. Но лучше сразу определиться с порядком объявления спецификаторов доступа, и стараться его придерживаться. Разработаем программу, в которой объявим простейший класс, в котором будет объявлена одна функция, печатающая сообщение.

#include "stdafx.h"

#include "stdio.h"

#include <iostream>

// начало объявления класса

class CppStudio // имя класса

{

public: // спецификатор доступа

void message() // функция (метод класса) выводящая сообщение на экран

{

printf("hello\n");

}

}; // конец объявления класса CppStudio

 

int main()

{

CppStudio obj; // объявление объекта

obj.message(); // вызов функции класса message

system("pause");

return 0;

}

Мы определили класс с именем CppStudio. В теле класса объявлен спецификатор доступа public, который позволяет вызывать другим функциям методы класса, объявленные после public. Вот именно поэтому в главной функции, мы смогли вызвать функцию message(). В классе CppStudio объявлена всего одна функция, которая не имеет параметров и выводит сообщение на экран. Методы класса — это те же функции, только объявлены они внутри класса, поэтому всё, что относится к функциям актуально и для методов классов. Объявление классов выполняется аналогично объявлению функций, то есть класс можно объявлять в отдельном файле или в главном файле.

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

 

#include "stdafx.h"

#include "stdio.h"

#include <iostream>

 

class CppStudio // имя класса

{

private: // спецификатор доступа private

int day, // день

month, // месяц

year; // год

public: // спецификатор доступа public

void message() // функция (метод класса) выводящая сообщение на экран

{

printf("\nwebsite: cppstudio.comntheme: Classes and Objects in C + +\n");

}

void setDate(int date_day, int date_month, int date_year) // установка даты в формате дд.мм.гг

{

day = date_day; // инициализация день

month = date_month; // инициализация месяц

year = date_year; // инициализация год

}

void getDate() // отобразить текущую дату

{

printf("Date: %d.%d.%d", day, month, year);

}

}; // конец объявления класса CppStudio

 

int main(int argc, char* argv[])

{

setlocale(LC_ALL, "rus"); // установка локали

int day, month, year;

printf("Введите текущий день месяц и год!\n");

printf("день: ");

scanf("%d",&day);

printf("месяц: ");

scanf("%d",&month);

printf("год: ");

scanf("%d",&year);

CppStudio obj; // объявление объекта

obj.message(); // вызов функции класса message

obj.setDate(day, month, year); // инициализация даты

obj.getDate(); // отобразить дату

system("pause");

return 0;

}

В определении класса появился новый спецификатор доступа private, Данный спецификатор доступа ограничивает доступ к переменным, которые объявлены после него и до начала спецификатора доступа public. Таким образом, к переменным day, month, year, могут получить доступ только методы класса.

Функции, не принадлежащие классу, не могут обращаться к этим переменным. Элементы данных или методы класса, объявленные после спецификатора доступа private, но до начала следующего спецификатора доступа называются закрытыми элементами данных и закрытыми методами класса. Следуя принципу наименьших привилегий и принципу хорошего программирования, целесообразно объявлять элементы данных после спецификатора доступа private, а методы класса — после спецификатора доступа public. Тогда, для манипулирования элементами данных, объявляются специальные функции setDate() и getDate(). Подробно рассмотрим каждый метод. Метод setDate()инициализирует переменные day, month, year. Чтобы просмотреть, значения в закрытых элементах данных объявлена функция getDate(),которая возвращает значения из переменных day, month, yearв виде даты.На этом определение класса закончено, в main(), как и всегда, создаем объект класса, и через объект вызываем его методы. Если бы элементы данных были объявлены после спецификатора public мы бы смогли к ним обратиться точно также, как и к методам класса.


 

В VC++ введено понятие компонентов – специальных классов, в которых объекты определяются такими характеристиками, как свойства, методы и события. Причем, в отличии от работы с обычными классами, при работе в VC++ возможно манипулировать видом и функциональным поведение компонентов и на стадии проектирования приложения, и в момент его выполнения. Здесь вводится еще одно понятие событие. Что это такое? Это тоже функция, которая запускается при наступлении какого-либо события. В системе Windows к событиям можно отнести нажатие кнопкой мыши, нажатие клавиши и т.п.

Например,

 


 







Последнее изменение этой страницы: 2017-02-10; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 54.237.183.249 (0.005 с.)