Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Наследование

.pdf
Скачиваний:
2
Добавлен:
07.02.2016
Размер:
762.42 Кб
Скачать

Объектно-ориентированное программирование

Наследование

Наследование

позволяет создать иерархические классификации

Позволяет создать базовый тип, который определяет характеристики, присущие множеству связанных элементов

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

Формат наследования

class имя_производного класса : доступ имя базового класса

{

}

public

private

 

 

protected

Базовый класс

Производный класс

Наследование

Лампочка

-состояние

+Включить() +Выключить() +Проверить состояние()

public

Цветная лампочка

-цвет

+Установить цвет() +Узнать цвет()

Объект : Цветная лампочка

состояние

цвет

class Lamp{ bool state; public:

void TurnOn(); void TurnOff(); bool IsTurned(); };

class ColorLamp:public Lamp{ int color;

public:

void SetColor(int i){color=i;} int GetColor(){return color;} };

Общие правила порождения классов

количество базовых классов в списке порождения может быть любым;

один и тот же класс не может быть задан в списке порождения дважды

базовый класс должен быть определен

классы не могут быть определены как union

Цветная лампочка

using namespace std;

char* color_lamp::getcolor(){

 

 

switch (color){

enum colors {black, green, blue, white, red};

case black:return "black";

 

case green:return "green";

class lamp{

case blue:return "blue";

case white:return "white";

bool state;

case red:return "red";

public:

default: return "error";

 

void TurnOn(){state=true;}

}

void TurnOff(){state=false;}

}

bool IsTurned(){return state;}

int main()

};

{

 

 

color_lamp l1;

class color_lamp:public lamp{

l1.TurnOn();

colors color;

l1.setcolor(blue);

public:

if (l1.IsTurned()){

cout<<"color - "<<l1.getcolor();

 

void setcolor(colors c){color=c;}

l1.TurnOff();

cin.get();

 

char* getcolor();

return 0;

};

}

Область видимости компонента в производном классе

область видимости в базовом классе

cпособ определения производного класса (class/struct)

спецификация доступа в списке наследования

Область видимости компонента в производном классе

наследо-

public

private

protected

Доступ в списке

 

 

 

вания

 

 

 

Базовый класс

 

 

 

 

 

 

 

public

public

private

protected

 

 

 

 

private

закрыто в

закрыто в

закрыто в

 

базовом

базовом

базовом

 

классе

классе

классе

 

 

 

protected protected

private

protected

Пример 1 Наследование как public

#include <iostream> using namespace std;

class base { int i, j;

public:

void set(int a, int b) { i = a; j = b; }

void show() { cout << i << " " << j << "\n"; }

};

class derived : public base { int k;

public:

derived(int x) { k = x; }

void showk() { cout << k << "\n"; } };

int main()

{

derived obj(3); obj.set(1, 2);

obj.show();

obj.showk();

return 0;

}

Пример 2 Наследование protected данных

#include <iostream>

int main()

using namespace std;

{

class base {

derived obj;

protected:

obj.set(2, 3);

int i, j;

obj.show();

public:

obj.setk();

void set(int a, int b) { i = a; j = b; }

obj.showk();

void show()

return 0;

{ cout << i << " " << j << "\n"; }

}

};

 

class derived : public base {

 

int k;

 

public:

 

void setk() { k = i*j; }

 

void showk() { cout << k << "\n"; }

 

};