Darmowe Forum
Grudzieñ 30, 2024, 18:44:49
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 3907 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
proskills
moikrewni
zlotasiodemka
polski-serwer-rpg
blackmoon