lista6

background image

Uniwersytet Zielonogórski

Instytut Sterowania i Systemów Informatycznych

Programowanie obiektowe w C++

Lista 6  Polimorzm oraz funkcje wirtualne

1 ‚wiczenia

1. Dla schematu dziedziczenia A → B → C:

(a) zdeniowa¢ klasy przy zaªo»eniu, »e klasa A ma

by¢ klas¦ abstrakcyjn¡,

(b) wyposa»y¢ wszystkie klasy w wirtualn¡ metod¦

nazwa zwracaj¡c¡ nazw¦ klasy,

(c) doda¢ destruktory wirtualne,

(d) doda¢ funkcj¦ globaln¡ zaprzyja¹nion¡ z klas¡

A, tak aby mogªa wykona¢ to samo co funkcje

z podpunktu (b).

2. Napisa¢ denicj¦ klasy z trzema przeªadowanymi

funkcjami wirtualnymi. Stworzy¢ now¡ klas¦ dzie-

dzicz¡ca po pierwszej, z tylko jedn¡ przeªadowan¡

funkcj¡ wirtualn¡. Utworzy¢ obiekt klasy pochodnej

i odpowiedzie¢ na nast¦puj¡ce pytania:

(a) Czy mo»na wywoªa¢ wszystkie trzy bazowe

funkcje poprzez obiekt klasy pochodnej i ewen-

tualnie w jaki sposób?

(b) Czy po zrzutowaniu adresu klasy pochodnej na

adres klasy bazowej mo»na wywoªa¢ wszystkie

funkcje?

(c) Czy po usuni¦ciu denicji funkcji w klasie po-

chodnej mo»na wykona¢ podpunkt (a)?

3. Poprawi¢ bª¦dy programie, a nast¦pnie przeanalizo-

wa¢ jego dziaªanie.

#include <iostream>

|

| void main() {

using namespace std;

|

X ob1;Y ob2; Z ob3;

|

ob2.fun1; ob2.fun2;

class X {

|

public:

|

X *wsk = &ob2;

static int x1;

|

wsk>fun1(); wsk>fun2();

void virtual fun1()

|

wsk>X::fun1(); wsk>X::fun2();

{ cout<<"funkcja fun1 z klasy X"; } |

static void virtual fun2()=0;

|

wsk = &ob3;

};

|

wsk>fun1(); wsk>fun2();

|

wsk>X::fun1(); wsk>Z::fun2();

class Y: public X {

| }

public:

|

void virtual fun1()

|

{ cout<<"funkcja fun1 z klasy Y"; } |

void fun2()

|

{ cout<<"funkcja fun2 z klasy Y"; } |

};

|

|

class Z: public Y{

|

public:

|

void virtual fun1()

|

{ cout<<"funkcja fun1 z klasy Z"; } |

void virtual fun2()=0

|

{ cout<<"funkcja fun2 z klasy Z"; } |

};

|

4. W ¢wiczeniu (1) zastanowi¢ si¦ jak zrealizowa¢ za-

danie konstruktora wirtualnego.

5. Zrealizowa¢ poni»szy schemat dziedziczenia (popra-

wi¢ tak»e relacj¦ pomi¦dzy klasami):

Ka»da z klas powinna posiada¢ funkcje wirtualne

rysuj(), przesun() oraz obrot(). Dokona¢ wir-

tualnego wywoªania tych funkcji dla ró»nego typu

obiektów.

6. Napisa¢ klas¦ zawieraj¡c¡ dwie metody wykonuj¡ce

to samo zadanie, jedn¡ w wersji wirtualnej, a dru-

g¡ niewirtualnej. Doda¢ now¡ klas¦ dziedzicz¡c¡ z

wspomnianej klasy, a nast¦pnie porówna¢ czasy wy-

woªania ka»dej z funkcji (posªu»y¢ si¦ np. funkcj¡

clock()  plik nagªówkowy time.h).

7. Napisa¢ krótki program obrazuj¡cy ró»nic¦ pomi¦-

dzy wywoªaniem funkcji wirtualnej wewn¡trz nor-

malnej funkcji skªadowej klasy, a wywoªaniem funk-

cji wirtualnej wewn¡trz konstruktora. Program po-

winien pokaza¢, »e takie dwa wywoªania generuj¡

ró»ne wyniki.

8. Dane s¡ klasy bazowe rezystor, kondensator i cew-

ka. Wyprowadzi¢ z nich klasy pochodne: cewka rze-

czywista i kondensator rzeczywisty, a z nich z kolei

ukªad RLC. Maj¡c do dyspozycji tak przygotowany

zestaw elementów prostych, zdeniowa¢ ukªad_rez

zawieraj¡cy dynamiczn¡ tablic¦ wska¹ników do ta-

kich obiektów. Wyznaczy¢ charakterystyk¦ rezonan-

sow¡ w zadanym przedziale cz¦stotliwo±ci dla szere-

gowego i równolegªego poª¡czenia elementów.


Wyszukiwarka

Podobne podstrony:
lista6
Lista6, PWr WME Energetyka, Podstawy mechaniki i wytrzymałości Polko
lista6
lista6 moja, ProgCPP 04 Sort2
lista6 moja opis
lista6
www.elearning.po.opole.pl wwi file.php 5 Budownictwo-lista6
algebra lista6
lista6
Lista6 Geometria Analityczna R3 2013 2014 c1
Lista6 2
ElektrodynamikaI Lista6
Lista6
LISTA6
Lista6 AF 2013 a1 id 270468 Nieznany
Lista6 2 CiagloscAndRozniczk
lista6 moja opis
lista 6 lista6
Lista6 GraniceFunkcji

więcej podobnych podstron