Лекция 16. Введение в ООП. Часть 7 презентация

Темы Конструкторы и деструкторы при наследовании

Слайд 1Лекция 16. Введение в ООП. Часть 7
Красс Александр
Alexander.Krass@gmail.com

СПбГУ ИТМО, 2008


Слайд 2Темы
Конструкторы и деструкторы при наследовании


Слайд 3Конструкторы при наследовании
class A
{
public:
A() { cout

public A
{
public:
B() { cout << "B()\n"; }
};

void main()
{
A *a = new B; // Что мы увидим на экране?
}

Слайд 4Конструкторы при наследовании
class A
{
public:
A() { cout

public A
{
public:
B() { cout << "B()\n"; }
};

void main()
{
A *a = new B; // A()
} // B()

Слайд 5Конструкторы при наследовании
Множественное наследование – это зло!
Но это не касается наследования

интерфейсов.


Слайд 6Конструкторы при наследовании
Пример интерфейса:
class A
{
public:
virtual void foo() = 0;

virtual void boo() = 0;
}

Слайд 7Конструкторы при наследовании
Пример множественного наследования:
class A {...};
class B {...};

class C :

public A, public B
{
...
};

Слайд 8Деструкторы при наследовании
class A
{
int *i;
public:
A() { i = new int(5); }
~A()


{
cout <<
"~A() => delete i\n";
delete i;
}
};

class B : public A
{
int *j;
public:
B() { j = new int(7); }
~B()
{
cout <<
"~B() => delete j\n";
delete j;
}
};

void main()
{
A *a = new B; // Что мы
delete a; // увидим?
}


Слайд 9Деструкторы при наследовании
class A
{
int *i;
public:
A() { i = new int(5); }
~A()


{
cout <<
"~A() => delete i\n";
delete i;
}
};

class B : public A
{
int *j;
public:
B() { j = new int(7); }
~B()
{
cout <<
"~B() => delete j\n";
delete j;
}
};

void main()
{
A *a = new B; // ~A() => delete a; // delete i
} // Деструктор B не вызовется!


Слайд 10Деструкторы при наследовании
class A
{
int *i;
public:
A() { i = new int(5); }
virtual

~A()
{
cout <<
"~A() => delete i\n";
delete i;
}
};

class B : public A
{
int *j;
public:
B() { j = new int(7); }
virtual ~B()
{
cout <<
"~B() => delete j\n";
delete j;
}
};

void main()
{
A *a = new B; // ~B() => delete a; // delete j
} // ~A() => delete i


Слайд 11Для закрепления материала
class A
{
int *i;
public:
A() { i = new

int(5); }
virtual void foo()
{ cout << "A::foo()\n"; }
virtual ~A()
{
delete i;
foo();
}
};

class B : public A
{
int *j;
public:
B() { j = new int(7); }
virtual void foo()
{ cout << "B::foo()\n"; }
virtual ~B()
{
delete j;
foo();
}
};

void main() // Что мы увидим
{ // на экране?
A *a = new B;
delete a;
}


Слайд 12Для закрепления материала
class A
{
int *i;
public:
A() { i = new

int(5); }
virtual void foo()
{ cout << "A::foo()\n"; }
virtual ~A()
{
delete i;
foo();
}
};

class B : public A
{
int *j;
public:
B() { j = new int(7); }
virtual void foo()
{ cout << "B::foo()\n"; }
virtual ~B()
{
delete j;
foo();
}
};

void main() // B::foo()
{ // A::foo()
A *a = new B;
delete a;
}


Слайд 13Для закрепления материала
class A
{
int *i;

public:
A()
{ i =

new int(5); foo(); }

virtual void foo()
{ cout << "A::foo()\n"; }
};

class B : public A
{
int *j;

public:
B()
{ j = new int(7); foo(); }

virtual void foo()
{ cout << “B::foo()\n"; }
};

void main() // Что мы увидим
{ // на экране?
A *a = new B;
delete a;
}


Слайд 14Для закрепления материала
class A
{
int *i;

public:
A()
{ i =

new int(5); foo(); }

virtual void foo()
{ cout << "A::foo()\n"; }
};

class B : public A
{
int *j;

public:
B()
{ j = new int(7); foo(); }

virtual void foo()
{ cout << “B::foo()\n"; }
};

void main() // A::foo()
{ // B::foo()
A *a = new B;
delete a;
}


Слайд 15Спасибо за внимание
Вопросы?


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика