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

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

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

Наследование нескольких

классов

class base1{ protected: int x; public:

void showx(){cout<<x<<‘\n’;}

};

class base2{ protected: int y;

public:

void showy(){cout<<y<<‘\n’;}

};

class derived:public base1, public base 2{

public:

void set(int i, int j ){x=i; y=j;} };

int main(){ derived obj; obj.set(4,5); obj.showx(); obj.showy();

return 0;

}

Примеры

Class1

-a1 +a2

«protected»

Class2

-b1 #b2

Object1 : Class2

 

a1

закрыто в Class1

a2

 

b1

protected

b2

 

class Class1{ int a1;

public: int a2;

};

class Class2:protected Class1{ int b1;

protected: int b2;

};

Пример

 

 

 

 

 

 

classD

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

«private»

 

 

«protected»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

classB

 

classA

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-b1

#a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

+b2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

obj : classD

закрыто в classB

b1

protected

b2

private

a

 

d

 

class classA{ protected: int a;

};

class classB{ int b1; public:

int b2; };

class classD:protected classB, private classA{

int d; };

Пример

Class1

-a1 +a2

public

Class2

-b1 #b2

«protected»

Class4

#c1

Закрыто в Class1

obj : Class4

a1

a2

b1

b2

c1

Закрыто в Class 2

class Class1{ int a1; public:

int a2; };

class Class2:public Class1{ int b1;

protected: int b2;

};

class Class4:public Class2{ protected:

int c1; };

 

 

 

 

 

 

Перегрузка методов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

void post_student::set_diplomdata(){

 

 

 

 

 

 

 

#include

 

<iostream>

 

cout<<"Data from first diploma:\n";

using namespace std;

 

 

 

 

 

 

 

 

cout<<"kvalification -";

class student{

 

cin>>first_diploma;

char name[20];

 

cout<<"diplome number - ";

char group[10];

 

cin>>first_d_number;

public:

 

}

 

 

void set();

 

void post_student::print(){

void print();

 

 

student::print();

};

 

 

cout<<"Data for second education student\n ";

void student::set(){

 

 

cout<<"first diploma: "<<first_diploma<<endl;

cout<<"Input name: “;

cin>>name;

 

cout<<"Input group“;

cin>>group;

cout<<" first diploma N "<<first_d_number<<'\n';

 

}

 

}

void student::print(){

 

int main()

cout<<"Sudent:\n";

 

{

cout<<"Second name: "<< name<<"\n group - "<<group<<'\n';

post_student st1;

}

 

st1.set();

 

 

class post_student:public student{

st1.set_diplomdata();

char first_diploma[10];

 

 

st1.print();

char first_d_number[10];

 

 

cin.get();

public:

 

 

cin.get();

void set_diplomdata();

 

 

 

void print();

 

return 0;

 

 

};

 

}

Конструкторы

Вызываются в порядке происхождения классов.

конструктор_произоводного_класса(список аргументов ):

base1(список аргументов) ,base2(список аргументов),…, baseN(список аргументов)

{

//Тело конструктора производного класса

}

Пример. Конструкторы

#include <iostream>

class derived: public base {

int j;

 

using namespace std;

public:

derived(int x, int y): base(y)

 

class base {

{ j = x; cout << "Constructing

derived\n"; }

 

protected:

~derived() { cout << "Destructing

derived\n"; }

int i;

void show() { cout << i << " " << j <<

 

"\n"; }

public:

};

base(int x) { i = x; cout <<

int main()

"Constructing base\n"; }

{

 

derived ob(3, 4);

~base() { cout << "Destructing base\n";

ob.show();

}

return 0;

};

}

 

Деструкторы

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

Преимущества наследования

Возможность повторного использования кода;

Возможность отразить взаимоотношения объектов, свойственные предметной области;

Возможность рассматривать производный класс как подкласс базового, упрощая реализацию кода для производного класса;

Возможность обработки производных классов методами, разработанными при проектировании базового класса;

Возможность обновления или изменения содержания этих методов применительно к объектам производного класса, если такая необходимость имеется.

MFC