Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Имя_переменной-объекта.имя_функции-метода;//вызов метода






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

Для того чтобы написать программу в стиле ООП мы должны проделать следующие действия:

1. Описать объект.

2. Запрограммировать методы объекта.

3. Запрограммировать алгоритм решения основной задачи.

Описываем объект дробь в виде класса fraction.

class fraction{

int m; //числитель

int n; //знаменатель

public: void input(); // ввод дроби

void output(); // вывод дроби

void mult(int a); // умножение дроби на целое число

};

Программируем методы класса fraction

void fraction:: input(){// ввод дроби

cout< < " Числитель"; cin> > m;

cout< < " Знаменатель"; cin> > n;

}

void fraction:: output(){// вывод дроби

cout< < m< < «/»< < n;

}

void fraction:: mult(int a){// умножение дроби на число

m=m*a;

}

Программируем алгоритм решения основной задачи

void main(){

fraction A; //дробь

int k; // число на которое нужно умножить дробь

// ввод дроби

cout< < " Введите дробь";

/*Чтобы ввести дробь А, нужно у объекта A вызвать метод input. */

A.input();

//умножение дроби на целое число

cout< < " Введите число, на которое нужно умножить дробь";

cin> > k;

/*Чтобы умножить дробь А на число k нужно у объекта A вызвать */

A.mult(k); //вызываем метод mult для дроби A

// вывод дроби

A.output(); //вызываем метод output для дроби A

}

Ключевые слова private, protected, public определяют режим доступа (access mode) к членам класса. Они могут быть использованы в определении класса многократно и в произвольном порядке. Однако хорошим стилем программирования считается использование каждого из этих ключевых слов один раз.

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

В описанном выше примере нельзя напрямую из главной программы обращаться и изменять значения числителя и знаменателя дроби.

cin> > A.m> > A.n; // недопустимые операции

A.m=1; A.n=2; // недопустимые операции

Для ввода данных можно использовать функцию input(). Если необходимо изменять значения дроби, то можно добавить в класс специальную функцию, например, set()с идентификатором public, описать ее и вызвать в главной программе. Класс fraction станет выглядеть так:

class fraction{

int m; //числитель

int n; //знаменатель

public: void input(); // ввод дроби

void output(); // вывод дроби

void mult(int a); // умножение дроби на целое число

void set(int a, int b); // изменение значений дроби

};

void fraction:: set(int a, int b){

//присваивание значений числителю и знаменателю дроби

m=a; n=b;

}

void main(){

fraction A; //дробь

A.set(1, 2); //присваиваем дроби значение 1/2

A.output(); // выводим дробь

}

В Си++ можно создавать и использовать массивы объектов.

fraction B[2]; //массив дробей

for (int i=0; i< 3; i++){B[i].input(); }// ввод массива дробей

for (int i=0; i< 3; i++){B[i].output(); }// вывод массива дробей

Доступ к объектам можно получить через указатель. В этом случае к членам объекта обращаются с помощью оператора->.

fraction A; //дробь

// объявляем указатель типа fraction и присваиваем ему адрес дроби A

fraction* p=& A;

p-> input(); // ввод дроби

p-> output(); // вывод дроби

В основу объектно-ориентированных языков положены три важнейших принципа: инкапсуляция, наследованием, полиморфизм.

Инкапсуляция – механизм объединения данных и методов, позволяющих манипулировать этими данными, и защиты и того и другого от внешнего вмешательства или неправильного использования. Инкапсуляция означает, что в качестве единицы целого рассматривается объединение некоторой группы данных и некоторой группы функций.

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

Полиморфизм – это свойство, которое позволяет одно и тоже имя использовать для решения нескольких технически разных задач. Т. е. имя определяет класс (область) действий, которые в зависимости от типа данных могут существенно отличаться. Например, можно определить три типа переменных: целые, комплексные числа и векторы. Для каждого из них можно определить функцию sum(х, у) - сумму двух переменных, а можно сделать так, что для этих трех типов будет определена операция сложения х + у. В зависимости от того, какого типа будут переменные х и у, работать эта функция и операция сложения будут по-разному. Причем полиморфизм поддерживается в С++ и во время компиляции, и во время выполнения программы.

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.009 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал