Darmowe Forum
Maj 10, 2024, 00:25:34
Witamy,
Gość
.
Zaloguj się
lub
zarejestruj
.
Czy dotarł do Ciebie
email aktywacyjny?
1 Godzina
1 Dzień
1 Tydzień
1 Miesiąc
Zawsze
Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności
: Forum zostało uruchomione!
Strona główna
Pomoc
Zaloguj się
Rejestracja
Darmowe Forum
>
C++
>
Podstawy C++ cz. I
>
Funkcje wirtualne
Strony: [
1
]
« poprzedni
następny »
Drukuj
Autor
Wątek: Funkcje wirtualne (Przeczytany 3701 razy)
admin
Administrator
Ekspert
Wiadomości: 821
Funkcje wirtualne
«
:
Marzec 07, 2012, 09:25:34 »
Funkcje wirtualne
- związane z dziedziczeniem i polimorfizmem w klasach.
Dziedziczenie jest oczywiście niezwykle ważnym, a wręcz niezbędnym składnikiem programowania obiektowego. Stanowi jednak tylko podstawę dla kolejnych technik, mających dużo większe znaczenie i pozwalających na o wiele efektywniejsze pisanie kodu. Są nimi funkcje wirtualne.
Funkcje wirtualne, to jakby 'inteligentne' funkcje, które potrafią się dostosować do samego programu.
Niech to będzie program gry w którym głównymi graczami są klasy: samochody, różnych marek. Wszystkie samochody są powiązane ze sobą związkami dziedziczenia (potomkowie klasy pojazd). W zależności od rodzaju marki samochodu sposób jego działania będzie inny. Zatem aby wybrać określone działanie w programie umieszcza się liczne instrukcje warunkowe, jak if, czy switch. Po pewnym czasie zamierzono dodać kilka nowych marek samochodów. To proste: definiować nową klasę i.. no właśnie dokonać modyfikacji kodu w funkcjach. Niby nie problem. Wystarczy odszukać wszystkie wystąpienia instrukcji warunkowych dotyczących poszczególnych marek samochodów i dodać kilka linijek kodu.
Wydaje się proste. Jednakże w rzeczywistości jest inaczej. Tego typu modyfikacje są bardzo czasochłonne, a ich wykonanie naprawdę bardzo męczące. Ponadto trzeba ingerować w kod źródłowy, co nie zawsze jest osiągalne.
Stworzenie takiej funkcje jest naprawdę banalne i skupia się na dodaniu tylko jednego słówka przed deklaracją funkcji! Wystarczy poprzedzić deklarację słówkiem
virtual
i program stanie się 'inteligentny'.
Przykład 1.
Deklaracja klasy pojazd i ..
#include <cstdlib>
#include <iostream>
using namespace std;
class pojazd
{
public :
virtual void jade()
{ cout << "Jade...!!!!!" << endl; }
};
int main(int argc, char *argv[])
{
system("PAUSE");
return EXIT_SUCCESS;
}
funkcja wirtualna pozwala zmieniać jej zawartość w kolejnych klasach.
UWAGA:
Klasa abstrakcyjna zawiera przynajmniej jedną czysto wirtualną metodę i z jej powodu nie jest przeznaczona do instancjowania (tworzenia z niej obiektów), a jedynie do wyprowadzania zeń klas pochodnych .
«
Ostatnia zmiana: Marzec 07, 2012, 10:38:16 wysłane przez admin
»
Zapisane
admin
Administrator
Ekspert
Wiadomości: 821
Odp: Funkcje wirtualne
«
Odpowiedz #1 :
Marzec 07, 2012, 10:02:58 »
Przykład 2.
Wykorzystanie funkcji wirtualnej
#include <cstdlib>
#include <iostream>
using namespace std;
class pojazd
{
public :
virtual void jade()
{ cout << "Jade...!!!!!" << endl; }
};
class samochod : public pojazd
{
public :
void jade() // redefinicja metody wirtualnej
{cout << "Jade na czterech kolach..." <<endl; }
void paliwko(){};
};
class motocykl : public pojazd
{
public :
void jade() // redefinicja funkcji wirtualnej
{ cout << "Jade na dwoch kolach..." <<endl; }
void kanister();
};
int main(int argc, char *argv[])
{
system("PAUSE");
return EXIT_SUCCESS;
}
Kompilator sam "domyśla się", że nasza metody jest tak naprawdę redefinicją metody wirtualnej z klasy bazowej. Możemy jednak wyraźnie to zaznaczyć poprzez ponowne zastosowanie słowa virtual
Zapisane
admin
Administrator
Ekspert
Wiadomości: 821
Odp: Funkcje wirtualne
«
Odpowiedz #2 :
Marzec 14, 2012, 10:39:47 »
Przykład z chwaściorkiem
#include <cstdlib>
#include <iostream>
using namespace std;
class drzewo
{public:
virtual void pien(){cout<<"drzewo"<<endl;}};
class krzaczek :public drzewo
{public: void pien(){cout<<"krzaczek"<<endl;}};
int main(int argc, char *argv[])
{drzewo sosenka;
krzaczek chwascior;
chwascior.pien();
sosenka.pien();
system("PAUSE");
return EXIT_SUCCESS;
}
Zapisane
Strony: [
1
]
Drukuj
« poprzedni
następny »
Skocz do:
Wybierz cel:
-----------------------------
Zadanie C++ lutego -Agnieszka
-----------------------------
=> Nowy dział
=> Zadanie
-----------------------------
E14
-----------------------------
=> DIV
=> Java Script
=> php
-----------------------------
Dla Magdy i Wojtka
-----------------------------
=> Liczby dwójkowe
-----------------------------
Przykłady stron internetowych
-----------------------------
=> Strona zbudowana z tabelek
-----------------------------
Podstawy PHP
-----------------------------
=> Przesyłanie danych z formularza php
=> Pętle w php
-----------------------------
Java Script
-----------------------------
=> Java Script
-----------------------------
C++ Nowe rozdanie
-----------------------------
=> C++
-----------------------------
Java JDK
-----------------------------
=> Java ale nie Script
-----------------------------
Hyde Park
-----------------------------
=> Informacje
-----------------------------
C+++
-----------------------------
=> A Kuba powiedział
-----------------------------
Multimedia
-----------------------------
=> Photoshop
=> Nowy dział
=> Java Script
=> Corel
-----------------------------
Html-strony internetowe
-----------------------------
=> Podstawy HTML- ramki/ frames
=> Podstawy HTML- tabelki
-----------------------------
C++
-----------------------------
=> Podstawy C++ cz. I
=> Kompilatory C++
=> Programowanie obiektowe w C++
=> Problem w C++
=> Podstawy
=> C++ po raz pierwszy
-----------------------------
Turbo Pascal
-----------------------------
=> Turbo Pascal semestr II
=> Projekt AŚKA
=> Turbo Pascal semestr I
=> Podstawy Turbo Pascal
Ładowanie...
Polityka cookies
Darmowe Fora
|
Darmowe Forum
avallonandaballava
pegasus
mundodetelenovelas
slimrpg
piraci