![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Имя_переменной-объекта.имя_функции-метода;//вызов метода
Напишем программный код для решения такой задачи. Пусть требуется ввести простую дробь, умножить ее на заданное число и вывести результат. Для того чтобы написать программу в стиле ООП мы должны проделать следующие действия: 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(х, у) - сумму двух переменных, а можно сделать так, что для этих трех типов будет определена операция сложения х + у. В зависимости от того, какого типа будут переменные х и у, работать эта функция и операция сложения будут по-разному. Причем полиморфизм поддерживается в С++ и во время компиляции, и во время выполнения программы.
|