Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Point Tn, Tk; // начало и конец линии
public: void draw(void) // метод рисования линии { .... line(Tn.getx(), Tn.gety(), Tk.getx(), Tk.gety()); } void setline(int ncolor) {....} }; };
Пример 2 int x; int y; class enclose { public: int x; static int s; class inner { void f(int i) { x = i; // ошибка: присваивание enclose::x s = i; // нормально: присваивание enclose::s ::x = i; // нормально: присваивание глобальному x y = i; // нормально: присваивание глобальному y } void g(enclose* p, int i) { p->x = i; // нормально: присваивание enclose::x } }; }; inner* p = 0; // ошибка: `inner' вне области видимости Глава 6. Наследование Наследование Наследование позволяет строить иерархии, в которых производные классы получают элементы родительского (родительских) или базового классов и могут дополнять или изменять его свойства. Классы, находящиеся ближе к началу иерархии, объединяют в себе наиболее общие черты для всех нижележащих классов. По мере продвижения вниз иерархии, классы приобретают все более индивидуальные черты. Множественное наследование позволяет одному классу обладать свойствами многих родительских. Причем любой класс может быть объявлен потомком ранее описанного класса. Доступ к полям, описанным в классе родителя, осуществляется так же, как в собственном. Поиск метода в иерархии класса выполняется следующим образом: · в первую очередь компилятор устанавливает тип объекта · ищет метод в классе объекта, если находит, то подключает его · если метод в классе объекта не найден, то идет поиск в классе родителя. В случае успеха вызывается метод класса родителя. Если метод в классе родителя не найден, то поиск продолжается в классе предков до тех пор, пока метод не будет найден · если метод не найден, выдается ошибка Механизм наследования обеспечивает создание дерева родственных классов. Дерево может иметь несколько уровней, причем на каждом из них могут добавляться новые поля и методы. Ключи доступа при наследовании При описании класса в его заголовке перечисляются все классы, являющиеся для него базовыми. Возможность обращения к элементам этих классов регулируется с помощью ключей доступа: private, protected, public. Пример 1 class name:[private|protected|public] parent_class;
class A{...}; class B{...}; class C{...}; class D:A, protected B, public C {...};
Private элементы базового класса в производном классе недоступны в производном классе независимо от ключа доступа. Обращение к ним может осуществляться только через элементы базового класса. Protected элементы с ключом private становятся private, в остальных случаях права доступа к ним не изменяются. Если базовый класс наследуется с ключом private, можно выборочно сделать некоторые элементы доступными в производном классе. Для этого их необходимо объявить в секции public производного класса с помощью оператора доступа к области видимости (::). Пример 2 Class base { ... public: void f(); }; Class derived:private base { ... public: base::void f(); }; Для различных методов класса при использовании механизма наследования существуют разные правила наследования. Конструкторы и операторы присваивания в производном классе не наследуются. Операторы инкрементации и декрементации – наследуются. Пример 3 Пример простого наследования
Class queue { protected: int q[10]; int sloc, rloc; public: void init(void); void qput(init i); int qget(void); }; Class queue1:public queue { int sum; public: int get_sum(void); void show _sum (void); }; /* копирование функций-членов класса queue */ voi queue::init(void) { rloc=sloc=0; } int queue::qget(void) { if(sloac==rloc) { cout << "очередь пуста"; return 0; /* необходимо вернуть какое-либо значение */ } return q[rloc++]; } Void queue::qput(int i) { if (sloc ==10) { cout << "очередь заполнена"; return; } q [sloc ++]=i; } /* Описание функций - членов класса queue 1*/ int queue1::get_sum(void) { sum=0; for(int i = rloc; i<sloc; i++) sum+=q[i]; return sum; } void queue1::show_sum(void) { cout <<"Сумма очереди - "<<sum <<endl; } main(void) { queue1 obj; obj.init(); for(int i=0; i<5; i++) { obj.qput(100+i); obj.get_sum(); obj.show_sum(); } for(i=0; i<6; i++) { obj.get_sum(); obj.show_sum(); obj.qget(); } return 0; }
|
|||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-07-18; просмотров: 65; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.140.242.165 (0.012 с.) |