Style programowania, geneza języka C++ Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Programowanie obiektowe Copyright c 2007 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat wizualizacji danych sensorycznych. Jest on udostępiony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową. Programowanie obiektowe Style programowania, geneza języka C++
Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer: http://latex-beamer.sourceforge.net Programowanie obiektowe Style programowania, geneza języka C++
1 Style programowania 2 Historia narodzin Motywacja Chronologia Związki z C 3 Wartości domyślne Konwencja nazw plików nagłówkowych
Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione
Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione
Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione
Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione
Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione
Ważniejsze style Style programowania Programowanie proceduralne Nacisk kładzie się na przetwarzanie, tzn. zbudowania algorytmu potrzebnego do wykonania wymaganych obliczeń. Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione
Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Uwypukla powiązanie danych z procedurami oraz ukrywa dane, które wykorzystywane są tylko w pewnych blokach obliczeniowych reprezentowanych przez moduły. Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione
Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Zakłada możliwość definiowania typów, które mają te same własności jak typy wbudowane. Programowanie obiektowe Programowanie uogólnione
Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Tworzenie struktur pochodnych poprzez dziedziczenie z możliwością modyfikacji dzięki polimorfizmowi. Hermetyzacja wybranych struktur. Programowanie uogólnione
Ważniejsze style Style programowania Programowanie proceduralne Programowanie modularne Programowanie z abstrakcją danych Programowanie obiektowe Programowanie uogólnione Umożliwia tworzenie parametryzowanych struktur i funkcji/procedur, dla których parametrami jest typ danych.
Programowanie z wykorzystaniem podprogramów
Programowanie z wykorzystaniem podprogramów Styl charakterystyczny dla przypadku wykorzystywania asemblera oraz wczesnej wersji Basic a.
Programowanie z wykorzystaniem podprogramów
Programowanie z wykorzystaniem podprogramów Wielość wzajemnych powiązań prowadzi do tworzenia się nieczytelnych konstrukcji programów.
Programowanie proceduralne
Programowanie proceduralne Zmienne lokalne poprawiają wykorzystanie pamięci oraz czytelność programu.
Programowanie proceduralne Paradygmat programowania proceduralnego:
Programowanie proceduralne Paradygmat programowania proceduralnego: Zdecyduj jakie chcesz mieć procedury; stosuj najlepsze algorytmy jakie możesz znaleźć.
Programowanie proceduralne Paradygmat programowania proceduralnego: Zdecyduj jakie chcesz mieć procedury; stosuj najlepsze algorytmy jakie możesz znaleźć. Przykład języków programowania wspierających ten paradygmat: Pascal, C, Java, C++, Python, Perl itp.
Programowanie proceduralne Podstawowe wady czystego programowania proceduralnego. Brak możliwości wyróżnienia powiązań między strukturami danych, a procedurami operującymi na nich. Konieczność stosowania różnych nazw procedur nawet w przypadku, gdy wykonują te same operacje, a jedyną różnicą jest typ danych, na których wykonywana jest ta operacja. Umieszczanie wszystkich elementów w jednakowym obszarze zasięgu ważności definicji uniemożliwia hermetyzację wybranych partii programy. Nie pozwala to na łatwe rozdzielenia całego zadania na poszczególne podzadania.
Programowanie proceduralne Podstawowe wady czystego programowania proceduralnego. Brak możliwości wyróżnienia powiązań między strukturami danych, a procedurami operującymi na nich. Konieczność stosowania różnych nazw procedur nawet w przypadku, gdy wykonują te same operacje, a jedyną różnicą jest typ danych, na których wykonywana jest ta operacja. Umieszczanie wszystkich elementów w jednakowym obszarze zasięgu ważności definicji uniemożliwia hermetyzację wybranych partii programy. Nie pozwala to na łatwe rozdzielenia całego zadania na poszczególne podzadania.
Programowanie proceduralne Podstawowe wady czystego programowania proceduralnego. Brak możliwości wyróżnienia powiązań między strukturami danych, a procedurami operującymi na nich. Konieczność stosowania różnych nazw procedur nawet w przypadku, gdy wykonują te same operacje, a jedyną różnicą jest typ danych, na których wykonywana jest ta operacja. Umieszczanie wszystkich elementów w jednakowym obszarze zasięgu ważności definicji uniemożliwia hermetyzację wybranych partii programy. Nie pozwala to na łatwe rozdzielenia całego zadania na poszczególne podzadania.
Programowanie proceduralne Podstawowe wady czystego programowania proceduralnego. Brak możliwości wyróżnienia powiązań między strukturami danych, a procedurami operującymi na nich. Konieczność stosowania różnych nazw procedur nawet w przypadku, gdy wykonują te same operacje, a jedyną różnicą jest typ danych, na których wykonywana jest ta operacja. Umieszczanie wszystkich elementów w jednakowym obszarze zasięgu ważności definicji uniemożliwia hermetyzację wybranych partii programy. Nie pozwala to na łatwe rozdzielenia całego zadania na poszczególne podzadania.
Programowanie modularne
Programowanie modularne Modułem nazywamy zbiór powiązanych ze sobą procedur, struktur danych oraz zmiennych i wyodrębnionych w postaci osobnej konstrukcji językowej lub translacyjnej.
Programowanie modularne Modułem nazywamy zbiór powiązanych ze sobą procedur, struktur danych oraz zmiennych i wyodrębnionych w postaci osobnej konstrukcji językowej lub translacyjnej. To powiązanie pozwala skupić w jednym miejscu struktury danych oraz procedury i funkcje obsługujące te struktury.
Programowanie modularne
Programowanie modularne Ten typ programowania pozwala ukryć pomocnicze funkcje i struktury danych.
Programowanie modularne Ten typ programowania pozwala ukryć pomocnicze funkcje i struktury danych. Możliwe jest dość precyzyjne określenie co jest udostępniane na zewnątrz i z czego dany moduł korzysta. Pozwala to ukryć ewentualne późniejsze modyfikacje struktur wewnętrznych.
Programowanie modularne Paradygmat programowania modularnego:
Programowanie modularne Paradygmat programowania modularnego: Zdecyduj jakie chcesz mieć moduły; podziel program w taki sposób, aby ukryć dane w modułach.
Programowanie modularne Paradygmat programowania modularnego: Zdecyduj jakie chcesz mieć moduły; podziel program w taki sposób, aby ukryć dane w modułach. Przykład języków programowania wspierających ten paradygmat: Modula 2, Ada, C, Java, C++ itp.
Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.
Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.
Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.
Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.
Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.
Programowanie modularne najważniejsze cechy Ukrywanie funkcji, struktur danych oraz zmiennych mających znacznie lokalne w danym module. Możliwość całkowitego ukrycia udostępnianych struktur danych. Na zewnątrz modułu widoczne są jedynie ich cechy i własności. Odwoływanie się do konkretnego egzemplarza tworzonej struktury danych realizowane jest poprzez deskryptory. Wadą tej techniki jest brak możliwości kontroli zgodności typów na etapie kompilacji.
Programowanie modularne najważniejsze cechy Możliwość odizolowania się od nazw funkcji i zmiennych modułu używanych w innych modułach. Możliwość precyzyjnego określenia co z danego modułu jest widoczne i udostępniane na zewnątrz, a co nie. Mechanizm ten pozwala również określić co dany moduł importuje z innych modułów. Łatwiejsza organizacja pracy zespołowej.
Programowanie modularne najważniejsze cechy Możliwość odizolowania się od nazw funkcji i zmiennych modułu używanych w innych modułach. Możliwość precyzyjnego określenia co z danego modułu jest widoczne i udostępniane na zewnątrz, a co nie. Mechanizm ten pozwala również określić co dany moduł importuje z innych modułów. Łatwiejsza organizacja pracy zespołowej.
Programowanie modularne najważniejsze cechy Możliwość odizolowania się od nazw funkcji i zmiennych modułu używanych w innych modułach. Możliwość precyzyjnego określenia co z danego modułu jest widoczne i udostępniane na zewnątrz, a co nie. Mechanizm ten pozwala również określić co dany moduł importuje z innych modułów. Łatwiejsza organizacja pracy zespołowej.
Programowanie modularne podsumowanie Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrolą jednego modułu będącego zarządcą danego typu. Daje to jednak wciąż znacząco gorsze wsparcie niż dla typów wbudowanych.
Programowanie modularne podsumowanie Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrolą jednego modułu będącego zarządcą danego typu. Daje to jednak wciąż znacząco gorsze wsparcie niż dla typów wbudowanych. Wady czystego programowania modularnego: brak możliwości stosowania operatorów, w przypadku stosowania deskryptorów brak możliwości ścisłej kontroli typów na poziomie kompilacji, brak możliwości określenia dopuszczalności domyślnych konwersji oraz ich zdefiniowania.
Programowanie modularne podsumowanie Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrolą jednego modułu będącego zarządcą danego typu. Daje to jednak wciąż znacząco gorsze wsparcie niż dla typów wbudowanych. Wady czystego programowania modularnego: brak możliwości stosowania operatorów, w przypadku stosowania deskryptorów brak możliwości ścisłej kontroli typów na poziomie kompilacji, brak możliwości określenia dopuszczalności domyślnych konwersji oraz ich zdefiniowania.
Programowanie modularne podsumowanie Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrolą jednego modułu będącego zarządcą danego typu. Daje to jednak wciąż znacząco gorsze wsparcie niż dla typów wbudowanych. Wady czystego programowania modularnego: brak możliwości stosowania operatorów, w przypadku stosowania deskryptorów brak możliwości ścisłej kontroli typów na poziomie kompilacji, brak możliwości określenia dopuszczalności domyślnych konwersji oraz ich zdefiniowania.
Programowanie modularne podsumowanie Programowanie modularne umożliwia centralizację wszystkich danych jednego typu pod kontrolą jednego modułu będącego zarządcą danego typu. Daje to jednak wciąż znacząco gorsze wsparcie niż dla typów wbudowanych. Wady czystego programowania modularnego: brak możliwości stosowania operatorów, w przypadku stosowania deskryptorów brak możliwości ścisłej kontroli typów na poziomie kompilacji, brak możliwości określenia dopuszczalności domyślnych konwersji oraz ich zdefiniowania.
Abstrakcja typów danych
Abstrakcja typów danych Podejście oparte na abstrakcji danych pozwala traktować na równi typy wbudowane i typy definiowane przez programistę. Pozwala również na bezpośrednie odwoływanie się do struktur danych i dokonywanych na nich operacji (w odróżnieniu od programowania modułowego).
Abstrakcja typów danych Podejście oparte na abstrakcji danych pozwala traktować na równi typy wbudowane i typy definiowane przez programistę. Pozwala również na bezpośrednie odwoływanie się do struktur danych i dokonywanych na nich operacji (w odróżnieniu od programowania modułowego).
Abstrakcja typów danych Paradygmat programowania z zastosowaniem abstrakcji danych:
Abstrakcja typów danych Paradygmat programowania z zastosowaniem abstrakcji danych: Zdecyduj jakie chcesz mieć typy; dla każdego typu dostarcz pełny zbiór operacji.
Abstrakcja typów danych Paradygmat programowania z zastosowaniem abstrakcji danych: Zdecyduj jakie chcesz mieć typy; dla każdego typu dostarcz pełny zbiór operacji. Przykład języków programowania wspierających ten paradygmat: Ada, Clu, C++ itp.
Abstrakcja typów danych zalety i wady Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które mogą być dobrze izolowane od reszty programu. Zawierają one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich.
Abstrakcja typów danych zalety i wady Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które mogą być dobrze izolowane od reszty programu. Zawierają one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich.
Abstrakcja typów danych zalety i wady Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które mogą być dobrze izolowane od reszty programu. Zawierają one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich. Podstawową wadą jest brak elastyczności.
Abstrakcja typów danych zalety i wady Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które mogą być dobrze izolowane od reszty programu. Zawierają one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich. Podstawową wadą jest brak elastyczności. Przykład: Konstruując typy MacierzWJ (transformacje wektorów wyrażonych we współrzędnych jednorodnych) oraz Macierz4x4 należy zdefiniować oddzielne struktury danych wraz z metodami i operacjami, choć MacierzWJ jest jedynie uszczegółowieniem typu Macierz4x4.
Abstrakcja typów danych zalety i wady Programowanie z wykorzystaniem abstrakcji danych pozwala na tworzenie struktur, które mogą być dobrze izolowane od reszty programu. Zawierają one zarówno odpowiednie pola danych, jak też zdefiniowane metody i operacje dokonywane na nich. Podstawową wadą jest brak elastyczności. Przykład: Konstruując typy MacierzWJ (transformacje wektorów wyrażonych we współrzędnych jednorodnych) oraz Macierz4x4 należy zdefiniować oddzielne struktury danych wraz z metodami i operacjami, choć MacierzWJ jest jedynie uszczegółowieniem typu Macierz4x4.
Programowanie obiektowe
Programowanie obiektowe Podejście oparte na podejściu obiektowym umożliwia budowanie nowych typów danych na bazie wcześniej zdefiniowanych struktur (dziedziczenie).
Programowanie obiektowe Paradygmat programowania programowania obiektowego:
Programowanie obiektowe Paradygmat programowania programowania obiektowego: Zdecyduj jakie chcesz mieć klasy; dla każdej klasy dostarcz pełny zbiór operacji; korzystając z mechanizmu dziedziczenia, jawnie wskaż to, co jest wspólne.
Programowanie obiektowe Paradygmat programowania programowania obiektowego: Zdecyduj jakie chcesz mieć klasy; dla każdej klasy dostarcz pełny zbiór operacji; korzystając z mechanizmu dziedziczenia, jawnie wskaż to, co jest wspólne. Przykład języków programowania wspierających ten paradygmat: C++, Java, Python itp.
Programowanie obiektowe podstawowe cechy dziedziczenie możliwość tworzenia nowych struktur danych z wykorzystaniem struktur wcześniej zdefiniowanych wraz ze wszystkimi ich atrybutami i metodami. hermetyzacja możliwość ograniczanie dostępu do wybranych struktur danych. Pozwala to definiować ściśle określony interfejs dostępu do tych struktur. polimorfizm możliwość modyfikacji metod (określanych mianem metod wirtualnych) w strukturach bazowych poprzez ich redefiniowanie w strukturach pochodnych.
Programowanie obiektowe podstawowe cechy dziedziczenie możliwość tworzenia nowych struktur danych z wykorzystaniem struktur wcześniej zdefiniowanych wraz ze wszystkimi ich atrybutami i metodami. hermetyzacja możliwość ograniczanie dostępu do wybranych struktur danych. Pozwala to definiować ściśle określony interfejs dostępu do tych struktur. polimorfizm możliwość modyfikacji metod (określanych mianem metod wirtualnych) w strukturach bazowych poprzez ich redefiniowanie w strukturach pochodnych.
Programowanie obiektowe podstawowe cechy dziedziczenie możliwość tworzenia nowych struktur danych z wykorzystaniem struktur wcześniej zdefiniowanych wraz ze wszystkimi ich atrybutami i metodami. hermetyzacja możliwość ograniczanie dostępu do wybranych struktur danych. Pozwala to definiować ściśle określony interfejs dostępu do tych struktur. polimorfizm możliwość modyfikacji metod (określanych mianem metod wirtualnych) w strukturach bazowych poprzez ich redefiniowanie w strukturach pochodnych.
Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady?
Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0
Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0
Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0 We wcześniejszym przykładzie typy Macierz4x4 i MacierzWJ zostały zdefiniowane dla typu float. Aby zdefiniować je dla typu double należy wszystko na nowo przepisać. :-(
Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0 We wcześniejszym przykładzie typy Macierz4x4 i MacierzWJ zostały zdefiniowane dla typu float. Aby zdefiniować je dla typu double należy wszystko na nowo przepisać. :-(
Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0 We wcześniejszym przykładzie typy Macierz4x4 i MacierzWJ zostały zdefiniowane dla typu float. Aby zdefiniować je dla typu double należy wszystko na nowo przepisać. :-( Czy nie można było by stworzyć ogólnych mechanizmów nie tylko definiowania struktur, ale również pisania funkcji? Czy mechanizmy te mogłyby być na tyle ogólne, aby np. napisać funkcję umożliwiającą sortowanie dowolnych struktur danych?
Programowanie obiektowe podstawowe cechy Czy programowanie obiektowe może mieć jakieś wady? Ależ tak! Jest wciąż mało elastyczne!!!! :-0 We wcześniejszym przykładzie typy Macierz4x4 i MacierzWJ zostały zdefiniowane dla typu float. Aby zdefiniować je dla typu double należy wszystko na nowo przepisać. :-( Czy nie można było by stworzyć ogólnych mechanizmów nie tylko definiowania struktur, ale również pisania funkcji? Czy mechanizmy te mogłyby być na tyle ogólne, aby np. napisać funkcję umożliwiającą sortowanie dowolnych struktur danych?
Programowanie uogólnione Przykład z biblioteki C realizacji uogólnionych algorytmów dla tworzenia, manipulowania i przeszukiwania struktury drzewa binarnego. #include <search.h> void *tsearch(const void *key, void **rootp, int(*compar)(const void *, const void *)); void *tfind(const void *key, const void **rootp, int(*compar)(const void *, const void *)); void *tdelete(const void *key, void **rootp, int(*compar)(const void *, const void *)); void twalk(const void *root, void(*action)(const void *nodep, const VISIT which, const int depth));
Programowanie uogólnione Przykład z biblioteki C realizacji uogólnionych algorytmów dla tworzenia, manipulowania i przeszukiwania struktury drzewa binarnego. #include <search.h> void *tsearch(const void *key, void **rootp, int(*compar)(const void *, const void *)); void *tfind(const void *key, const void **rootp, int(*compar)(const void *, const void *)); void *tdelete(const void *key, void **rootp, int(*compar)(const void *, const void *)); void twalk(const void *root, void(*action)(const void *nodep, const VISIT which, const int depth));
Programowanie uogólnione Na poziomie języka C ideę programowania uogólnionego realizuje się poprzez rzutowanie z typów void*, void** itp.
Programowanie uogólnione Na poziomie języka C ideę programowania uogólnionego realizuje się poprzez rzutowanie z typów void*, void** itp. Najistotniejszą wadą tego rozwiązania jest brak kontroli typów na etapie kompilacji.
Programowanie uogólnione
Programowanie uogólnione Programowanie uogólnione pozwala tworzyć uniwersalne struktury, w których nie ma (lub są one zminimalizowane) ograniczeń na typ pól. Daje możliwość skoncentrowania się na ogólnych mechanizmach manipulowania strukturami danych. Można stworzyć np. wzorzec listy.
Programowanie uogólnione Programowanie uogólnione pozwala tworzyć uniwersalne struktury, w których nie ma (lub są one zminimalizowane) ograniczeń na typ pól. Daje możliwość skoncentrowania się na ogólnych mechanizmach manipulowania strukturami danych. Można stworzyć np. wzorzec listy.
Programowanie uogólnione
Programowanie uogólnione Konkretyzacja typu następuje w momencie odwołania się do wzorca wraz ze wszystkimi parametrami. Są one nazwami typów składowych. Odwołanie następuje wraz z deklaracją obiektu danej klasy.
Programowanie uogólnione Konkretyzacja typu następuje w momencie odwołania się do wzorca wraz ze wszystkimi parametrami. Są one nazwami typów składowych. Odwołanie następuje wraz z deklaracją obiektu danej klasy.
Programowanie uogólnione Konkretyzacja typu następuje w momencie odwołania się do wzorca wraz ze wszystkimi parametrami. Są one nazwami typów składowych. Odwołanie następuje wraz z deklaracją obiektu danej klasy.
Programowanie uogólnione Paradygmat programowania programowania uogólnionego:
Programowanie uogólnione Paradygmat programowania programowania uogólnionego: Zdecyduj jakie chcesz mieć algorytmy; parametryzuj je w taki sposób, by działały dla różnych typów i struktur.
Programowanie uogólnione Paradygmat programowania programowania uogólnionego: Zdecyduj jakie chcesz mieć algorytmy; parametryzuj je w taki sposób, by działały dla różnych typów i struktur. Przykład języków programowania wspierających ten paradygmat: C++ Programowanie uogólnione jest podstawową techniką programowania użytą przy tworzeniu standardowej biblioteki szablonów (STL), która jest jednym z podstawowych składników ANSI/ISO C++.
Programowanie uogólnione Paradygmat programowania programowania uogólnionego: Zdecyduj jakie chcesz mieć algorytmy; parametryzuj je w taki sposób, by działały dla różnych typów i struktur. Przykład języków programowania wspierających ten paradygmat: C++ Programowanie uogólnione jest podstawową techniką programowania użytą przy tworzeniu standardowej biblioteki szablonów (STL), która jest jednym z podstawowych składników ANSI/ISO C++.
Tło akcji Style programowania Historia narodzin Motywacja Chronologia Związki z C Bezpośrednim przyczynkiem do powstania koncepcji języka C++ były prace Stroustrupa w Cambridge nad doktoratem. W trakcie swoich prac miał zbadać różne organizacje systemowego oprogramowania w systemach rozproszonych.
Zdarzenia Style programowania Historia narodzin Motywacja Chronologia Związki z C Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy w Simuli było bardzo pomocne na etapie projektu i implmentacji. Poważne problemy związne z wydajnością programów napisanego w Simuli zmusza do poszukiwania bardziej wydajnego narzędzia. Traumatycznie bolesne doświadczenia związane z koniecznością implementacji symulatora w oparciu o język BCPL. Osiągnięta została bardzo dobra wydajność kosztem wielu problemów przy realizacji implementacji.
Zdarzenia Style programowania Historia narodzin Motywacja Chronologia Związki z C Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy w Simuli było bardzo pomocne na etapie projektu i implmentacji. Poważne problemy związne z wydajnością programów napisanego w Simuli zmusza do poszukiwania bardziej wydajnego narzędzia. Traumatycznie bolesne doświadczenia związane z koniecznością implementacji symulatora w oparciu o język BCPL. Osiągnięta została bardzo dobra wydajność kosztem wielu problemów przy realizacji implementacji.
Zdarzenia Style programowania Historia narodzin Motywacja Chronologia Związki z C Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy w Simuli było bardzo pomocne na etapie projektu i implmentacji. Poważne problemy związne z wydajnością programów napisanego w Simuli zmusza do poszukiwania bardziej wydajnego narzędzia. Traumatycznie bolesne doświadczenia związane z koniecznością implementacji symulatora w oparciu o język BCPL. Osiągnięta została bardzo dobra wydajność kosztem wielu problemów przy realizacji implementacji.
Zdarzenia Style programowania Historia narodzin Motywacja Chronologia Związki z C Udana (w sensie konstrukcji aplikacji) realizacja symulatora systemu rozproszenego z wykorzystaniem Simuli. Pojęcie klasy w Simuli było bardzo pomocne na etapie projektu i implmentacji. Poważne problemy związne z wydajnością programów napisanego w Simuli zmusza do poszukiwania bardziej wydajnego narzędzia. Traumatycznie bolesne doświadczenia związane z koniecznością implementacji symulatora w oparciu o język BCPL. Osiągnięta została bardzo dobra wydajność kosztem wielu problemów przy realizacji implementacji.
Epilog Style programowania Historia narodzin Motywacja Chronologia Związki z C Po zakończeniu prac nad doktoratem Stroustrup postanawia stworzyć język programowania, który łączyłby koncepcje klas z Simuli oraz elastyczność tego języka z efektywnością kodu języka BCPL.
Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te przeważnie były albo wynikiem głupich pomyłek w trakcie programowania albo też potknięć koncepcyjnych. Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie dla procesu projektowania i pisania programownia (autor kursu pozwolił sobie tę uwagę wzmocnić). Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył tego rodzaju wsparcia. Przykładem może być system Pascala. Sprawiał on więcej kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji projektu, aby dostosować go do warunków narzuconych przez implementację (co nie zmienia faktu, że jest to bardzo dobry język dla początkowego kursu nauki informatyki uwaga autora kursu).
Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te przeważnie były albo wynikiem głupich pomyłek w trakcie programowania albo też potknięć koncepcyjnych. Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie dla procesu projektowania i pisania programownia (autor kursu pozwolił sobie tę uwagę wzmocnić). Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył tego rodzaju wsparcia. Przykładem może być system Pascala. Sprawiał on więcej kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji projektu, aby dostosować go do warunków narzuconych przez implementację (co nie zmienia faktu, że jest to bardzo dobry język dla początkowego kursu nauki informatyki uwaga autora kursu).
Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te przeważnie były albo wynikiem głupich pomyłek w trakcie programowania albo też potknięć koncepcyjnych. Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie dla procesu projektowania i pisania programownia (autor kursu pozwolił sobie tę uwagę wzmocnić). Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył tego rodzaju wsparcia. Przykładem może być system Pascala. Sprawiał on więcej kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji projektu, aby dostosować go do warunków narzuconych przez implementację (co nie zmienia faktu, że jest to bardzo dobry język dla początkowego kursu nauki informatyki uwaga autora kursu).
Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te przeważnie były albo wynikiem głupich pomyłek w trakcie programowania albo też potknięć koncepcyjnych. Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie dla procesu projektowania i pisania programownia (autor kursu pozwolił sobie tę uwagę wzmocnić). Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył tego rodzaju wsparcia. Przykładem może być system Pascala. Sprawiał on więcej kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji projektu, aby dostosować go do warunków narzuconych przez implementację (co nie zmienia faktu, że jest to bardzo dobry język dla początkowego kursu nauki informatyki uwaga autora kursu).
Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Kompilator Simuli dobrze wychwytywał błędy typu. Błędy te przeważnie były albo wynikiem głupich pomyłek w trakcie programowania albo też potknięć koncepcyjnych. Ten drugi rodzaj błędów ma wręcz fundamentalne znaczenie dla procesu projektowania i pisania programownia (autor kursu pozwolił sobie tę uwagę wzmocnić). Żaden inny prosty system sprawdzania ścisłej zgodności typów nie dostarczył tego rodzaju wsparcia. Przykładem może być system Pascala. Sprawiał on więcej kłopotów niż pozwalał ich uniknąć. Zmuszał do modyfikacji projektu, aby dostosować go do warunków narzuconych przez implementację (co nie zmienia faktu, że jest to bardzo dobry język dla początkowego kursu nauki informatyki uwaga autora kursu).
Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Pojęcie klasy było zasadniczym elementem różniącym sztywny Pascal od elastycznej Simuli. Wyczerpujące sprawdzanie zgodności typów w Simuli sprawiało, że liczba problemów i błędów nie wzrastała szybciej niż liniowo wraz ze wzrostem programu.
Niektóre spostrzeżenia Historia narodzin Motywacja Chronologia Związki z C Pojęcie klasy było zasadniczym elementem różniącym sztywny Pascal od elastycznej Simuli. Wyczerpujące sprawdzanie zgodności typów w Simuli sprawiało, że liczba problemów i błędów nie wzrastała szybciej niż liniowo wraz ze wzrostem programu.
Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1979 (Maj) Początek prac na C z Klasami. (Październik) Oddanie do użytku pierwszej implementacji tego języka. 1983 (Sierpień) Oddanie do użytku pierwszej implementacji języka C++. (Grudzień) Powstanie nazwy C++. 1985 (Luty) Powstanie pierwszej wersji języka C++ (wersja E) do użytku zewnętrznego. (Październik) Ukazanie się pierwszego wydania książki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++.
Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1979 (Maj) Początek prac na C z Klasami. (Październik) Oddanie do użytku pierwszej implementacji tego języka. 1983 (Sierpień) Oddanie do użytku pierwszej implementacji języka C++. (Grudzień) Powstanie nazwy C++. 1985 (Luty) Powstanie pierwszej wersji języka C++ (wersja E) do użytku zewnętrznego. (Październik) Ukazanie się pierwszego wydania książki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++.
Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1979 (Maj) Początek prac na C z Klasami. (Październik) Oddanie do użytku pierwszej implementacji tego języka. 1983 (Sierpień) Oddanie do użytku pierwszej implementacji języka C++. (Grudzień) Powstanie nazwy C++. 1985 (Luty) Powstanie pierwszej wersji języka C++ (wersja E) do użytku zewnętrznego. (Październik) Ukazanie się pierwszego wydania książki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++.
Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1979 (Maj) Początek prac na C z Klasami. (Październik) Oddanie do użytku pierwszej implementacji tego języka. 1983 (Sierpień) Oddanie do użytku pierwszej implementacji języka C++. (Grudzień) Powstanie nazwy C++. 1985 (Luty) Powstanie pierwszej wersji języka C++ (wersja E) do użytku zewnętrznego. (Październik) Ukazanie się pierwszego wydania książki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++.
Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1979 (Maj) Początek prac na C z Klasami. (Październik) Oddanie do użytku pierwszej implementacji tego języka. 1983 (Sierpień) Oddanie do użytku pierwszej implementacji języka C++. (Grudzień) Powstanie nazwy C++. 1985 (Luty) Powstanie pierwszej wersji języka C++ (wersja E) do użytku zewnętrznego. (Październik) Ukazanie się pierwszego wydania książki Język C++. 1987 (Grudzień) Ukazanie się kompilatora GNU C++.
Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1989 (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji języka C++. 1990 (Maj) Powstawnie w firmie Borland pierwszej implementacji języka C++. (Lipiec) Przyjęcie koncepcji wzorców. (Listopad) Przyjęcie koncepcji wyjątków. 1992 (Luty) Powstanie pierwszej implementacji języka C++ (zawierającej wzorce i wyjątki) w firmie DEC. (Marzec) Powstanie pierwszej implementacji języka C++ w firmie Microsoft. (Maj) Powstanie pierwszej implementacji języka C++ w firmie IBM.
Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1989 (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji języka C++. 1990 (Maj) Powstawnie w firmie Borland pierwszej implementacji języka C++. (Lipiec) Przyjęcie koncepcji wzorców. (Listopad) Przyjęcie koncepcji wyjątków. 1992 (Luty) Powstanie pierwszej implementacji języka C++ (zawierającej wzorce i wyjątki) w firmie DEC. (Marzec) Powstanie pierwszej implementacji języka C++ w firmie Microsoft. (Maj) Powstanie pierwszej implementacji języka C++ w firmie IBM.
Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1989 (Grudzień) Powstanie zespołu ANSI X3J16 do spraw normalizacji języka C++. 1990 (Maj) Powstawnie w firmie Borland pierwszej implementacji języka C++. (Lipiec) Przyjęcie koncepcji wzorców. (Listopad) Przyjęcie koncepcji wyjątków. 1992 (Luty) Powstanie pierwszej implementacji języka C++ (zawierającej wzorce i wyjątki) w firmie DEC. (Marzec) Powstanie pierwszej implementacji języka C++ w firmie Microsoft. (Maj) Powstanie pierwszej implementacji języka C++ w firmie IBM.
Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1993 (Marzec) Przyjęcie koncepcji identyfikowania typu podczas wykonywania programu. (Lipiec) Przyjęcie koncepcji przestrzeni nazw. 1994 (Wrzesień) Przyjęcie standardu ANSI/ISO języka C++.
Ważniejsze daty Style programowania Historia narodzin Motywacja Chronologia Związki z C 1993 (Marzec) Przyjęcie koncepcji identyfikowania typu podczas wykonywania programu. (Lipiec) Przyjęcie koncepcji przestrzeni nazw. 1994 (Wrzesień) Przyjęcie standardu ANSI/ISO języka C++.
Genealogia Style programowania Historia narodzin Motywacja Chronologia Związki z C
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe elementy w stosunku do języka C: klasy, klasy pochodne (bez funkcji wirtualnych), konstruktory i destruktory, funkcje wywołania i powrotu (później usunięte), sterowanie dostępem do obiektów publicznych i prywatnych, klasy zaprzyjaźnione, sprawdzanie typów i przekształcanie argumentów funkcji.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania. Kilka faktów: Słowo kluczowe class pochodzi z Simuli (podobnie jak notacja wskaźnika this). Zapis funkcja(void) w ANSI C pochodzi z języka C z Klasami.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania. Kilka faktów: Słowo kluczowe class pochodzi z Simuli (podobnie jak notacja wskaźnika this). Zapis funkcja(void) w ANSI C pochodzi z języka C z Klasami.
Język C z klasami Style programowania Historia narodzin Motywacja Chronologia Związki z C Nowe własności dodane w 1981: funkcje rozwijane (ang. inline), argumenty domyślne, przeciążenia operatora przypisania. Kilka faktów: Słowo kluczowe class pochodzi z Simuli (podobnie jak notacja wskaźnika this). Zapis funkcja(void) w ANSI C pochodzi z języka C z Klasami.
Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym
Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym
Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym
Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym
Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym
Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym nie ma wewnętrznych ograniczeń wykluczających możliwość napisania jakiegoś rodzaju programu, tzn. można korzystać w nim z większości technik programowania. C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym
Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym semantyka języka znajduje się na niskim poziomie, tzn. podstawowe pojęcia języka odzwierciedlają podstawowe pojęcia tradycyjnego komputera. C jest językiem szeroko dostępnym C jest językiem przenośnym
Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym implementacje tego języka istnieją zarówno dla mikrokomputerów jak też dla dużych superkomputerów. C jest językiem przenośnym
Dlaczego C Style programowania Historia narodzin Motywacja Chronologia Związki z C C jest językiem elastycznym C jest językiem wydajnym C jest językiem szeroko dostępnym C jest językiem przenośnym programy napisane w C zazwyczaj nie można automatycznie przenosić z jednego systemu operacyjnego do drugiego. Jednak przenośność z uwzględnieniem odpowiednich uwarunkowań jest możliwa.
Cel Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol:
Cel Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol:
Cel Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol:
Cel Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych Zbudujmy program, który umożliwi wyliczanie współrzędnych punktów dla rodziny parabol: Ogólna postać równania: y = ax 2 + b
Implementacja Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a, float b) { return a x x+b; }
Implementacja Style programowania Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a, float b) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,1,0); }
Definiowanie wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a, float b = 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,1,0); }
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a, float b = 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,1); }
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a, float b= 0) { return a x x+b; } int main() { float y, x=5; } y = Parabola(x,1); // Parabola(x,1,0)
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,1); }
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x); }
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; } y = Parabola(x); // Parabola(x,1,0)
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x); } Co zrobić jeśli chcemy aby a = 2?
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,2); }
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; } y = Parabola(x,2); // Parabola(x,2,0)
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,2); } A jeśli ma być b = 5?
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,2,5); }
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,2,5); } A jeśli chcemy aby a = 1 i b = 5?
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,5); } A jeśli chcemy aby a = 1 i b = 5? Czy można tak?
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,,5); } A jeśli chcemy aby a = 1 i b = 5? A może tak?
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych float Parabola(float x, float a = 1, float b= 0) { return a x x+b; } int main() { float y, x=5; y = Parabola(x,1,5); } Jeśli chcemy zmodyfikować wartość jednego z parametrów domyślnych, to musimy podać wartości wszystkich parametrów, aż do miejsca, na którym występuje zmodyfikowana wartość.
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych void WyswietlOdleglosc( float xn, float yn, float xo=0, float yo=0, const char Jedn= cm )
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych void WyswietlOdleglosc( float xn, float yn, float xo=0, float yo=0, const char Jedn= cm )
Korzystanie z wartości domyślnych Wartości domyślne Konwencja nazw plików nagłówkowych void WyswietlOdleglosc( float xn, float yn, float xo=0, float yo=0, const char Jedn= cm ) { cout << sqrt(pow(xn-xo,2)+pow(yn-yo,2)) << Jedn << endl; }