piotreks
O mnie
Practice makes Perfect
Odpowiedzi: 61
-
2010-01-30 22:35:54 Czy przeładowaniu AJAXem można zmienić URL przeglądarki? [zamknięte]
Możesz dodawać do adresu kotwice (#) np.
strona.html#Strona_glownaI na tej podstawie rozpoznawać wybrany dział.
-
2010-02-05 12:44:08 Wywołanie statycznej metody w PHP
Wewnątrz klasy możesz korzystać zarówno z odwołania poprzez słowo kluczowe
selfjak i poprzez nazwę kwalifikowaną, z użyciem nazwy klasy. Np:<?php class A { public static function Statyczna() { echo 'Statyczna'; } public function Zwykla() { self::Statyczna(); A::Statyczna(); // równoważny zapis } } ?>Na zewnątrz wywołanie statycznej metody możliwe jest zarówno przy użyciu instancji obiektu, jak i samej klasy:
<?php $a = new A; $a->Statyczna(); A::Statyczna(); // to samo co wyżej ?>W przypadku dziedziczenia, chcąc wywołać metodę statyczną z klasy bazowej, można użyć zamiast słowa
self, słowoparent( w sytuacji kiedy zasłoniliśmy metodę statyczną w klasie pochodnej - zamiana taka nie jest konieczna, ponieważ metody statyczne są dziedziczone ).W PHP wersji 5.3 wprowadzona została nowa funkcjonalność - późne wiązanie metod statycznych. Wprowadzono nowe zastosowanie słowa kluczowego
static. Późne wiązanie umożliwia tworzenie wirtualnych metod statycznych.class A { public static function Statyczna() { echo 'Statyczna A'; } public static function PozneWiazanie() { static::Statyczna(); // odwołanie poprzez static, a nie self } public static function WczesneWiazanie() { self::Statyczna(); // zawsze wywoła metodę z tej klasy } } class B extends A { public static function Statyczna() { echo 'Statyczna B'; } } B::WczesneWiazanie(); // metoda "Statyczna()" z klasy A B::PozneWiazanie(); // metoda "Statyczna()" z klasy BObydwie metody:
WczesneWiazanie()iPozneWiazanie()zostały odziedziczone w klasie B z klasy A. Pierwsze wywołanieB::WczesneWiazanie()powoduje wywołanie metody z klasy A, pomimo tego, że została ona przesłonięta w klasie pochodnej. Wynika to z wczesnego wiązania, które jest domyślne w przypadku użycia słowaself. Natomiast drugie wywołanie działa już poprawnie w tym sensie, że odwołanie, które następuje wewnątrz odziedziczonej metody z klasy A, jest poprawnie przekierowywane do statycznej metody klasy B (jej nowej definicji). -
2010-02-07 23:15:53 STL vector - wyszukiwanie metoda bisekcji
#include <vector> #include <iostream> #include <functional> using namespace std; template<class T> bool less_than(const T& t1, const T& t2) { return t1 < t2; } template<class T, class Cmp> int bisekcja(const vector<T>& v, const T& s, const Cmp& cmp = Cmp()) { int a = 0; int b = v.size() - 1; int c; while(a <= b) { c = (a + b)/2; if(!cmp(v[c], s) && !cmp(s, v[c])) { return c; } else { if(cmp(s, v[c])) b = c - 1; else a = c + 1; } } return -1; } int main() { int liczby[] = { 1, 4, 7, 12, 15, 37, 75, 90, 102 }; vector<int> Tablica(liczby, liczby + sizeof(liczby) / sizeof(*liczby)); cout << bisekcja(Tablica, 7, ptr_fun(less_than<int>)) << endl; return 0; }`
-
2010-02-07 10:29:11 Dynamiczna rozbudowa klasy w php5
Rozwiązanie przedstawione przez halish'a ma dwie podstawowe wady:
1.Magiczna metoda
__callotrzymuje argumenty jako tablicę, i właśnie tablicę przekazuje do domknięcia o nazwie$method. W tej sytuacji nie możemy zdefiniować domknięcia wieloargumentowego:$foo->bar = function($a, $b, $c) { return $a+$b+$c; };a jedynie:
$foo->bar = function($a) { return $a[0]+$a[1]+$a[2]; };Dlatego lepszym rozwiązaniem, byłoby przedefiniowanie metody magicznej w następujący sposób:
class Foo { public function __call($method, $args) { if (isset($this->$method) === true) { call_user_func_array($this->$method, $args); } } }call_user_func_arraywywołuje funkcję (nie metodę, domknięcie w tym przypadku jest funkcją przypisaną polu klasy!) konwertując tablicę na kolejne argumenty.2.W sytuacji gdy nie możemy modyfikować definicji klasy (a co za tym idzie - dodać metodę magiczną
__call), można skorzystać z faktu, że domknięcia (Closures) to w rzeczywistości zwykłe klasy. Zapis:$closure = function($a, $b) { return $a+$b; };jest wewnętrznie zamieniany na klasę z metodą magiczną
__invoke:class closure { public function __invoke($a, $b) { return $a + $b; } }Ponieważ metoda ta jest publiczna, możemy ją wywoływać na rzecz zmiennej przechowującej domknięcie:
$closure = function($a, $b) { return $a+$b; }; $closure(1, 2); $closure->__invoke(1, 2); // poprawne, to samo co wyżej, ale jawne wywołanie metody magicznejDlatego każdą klasę, która nie zablokuje dodawania nowych pól poprzez przedefiniowanie metody magicznej
__set(przechwytującej przypisania do nieistniejących pól), możemy rozszerzyć o nowe funkcje (piszę funkcje, ponieważ nie są to metody, nie mają wskaźnika $this):class Foo {} $foo = new Foo; $foo->bar = function($a) { echo $a; }; $foo->bar->__invoke(1);Jak widać, nie było potrzeby modyfikowania klasy
Foo. Ale niestety nadal są to tylko funkcje, a nie metody posiadające dostęp do pól prywatnych i chronionych klasy. -
2010-01-31 19:23:06 Pozycjonowanie elementów. [zamknięte]
@DarthHass: niedokładnie tak jak mówisz, nie tylko przeglądarka.
Absolute - pozycjonowanie absolutne, ale względem elementu nadrzędnego, którego pozycjonowanie jest inne niż static.
Relative - pozycjonowanie względem normalnego położenia, takiego jakie miałoby gdyby było static.
-
2010-02-03 12:44:58 Możliwości C++
Jeśli chodzi o język C++ to jego największą zaletą jest to, że stwarza on nieograniczone możliwości, w przeciwieństwie do innych języków, których składnia czasami wręcz na siłę uszczęśliwia programistę zmyślnymi kombinacjami. W C++ napiszesz prawie wszystko. Dodatkowo zaawansowana znajomość tego języka umożliwia programiście tworzenie niesamowicie elastycznych rozwiązań - głównie mam na myśli umiejętne wykorzystanie szablonów w metaprogramowaniu.
Pokaz takich możliwości został zebrany w bibliotece boost - niesamowite rozszerzenie funkcjonalności języka C++, zwiększa intuicyjność i czytelność programów, oraz łatwość i szybkość ich tworzenia
W dziedzinie tworzenia GUI (graficznych interfejsów użytkownika) godnym polecenia jest Qt - umożliwia nie tylko tworzenie interfejsów graficznych, ale dostarcza niezależnych od platformy adapterów dla wątków, połączeń tcp, udp i wiele innych.
Do tworzenia gier na początek myślę przede wszystkim OpenGL, chociaż do tego wystarczy samo C.
-
2010-02-07 11:29:54 [c++]środowisko programistyczne
Microsoft Visual C++ 2008 Express Edition - darmowe, bez ograniczeń do zastosowań komercyjnych, wygodne, mechanizm IntelliSense.
Netbeans z wtyczką (pluginem) do C++ i dowolnym kompilatorem (np. cygwin, mingw, pod Linuksem gcc, g++).
-
2010-03-03 17:17:26 Funkcja w funkcji. [zamknięte]
Funkcje możesz tworzyć w dowolnym miejscu.
Jeżeli chcesz odwołać się do funkcji zdefiniowanej w innej funkcji:
var funkcja = function() { this.subfunkcja = function() { alert('Wewnętrzna'); } } new funkcja().subfunkcja(); -
2010-01-31 11:38:34 słowo kluczowe this
Rozszerzając wypowiedź tomaszs'a
Oddelegowanie konstruktora
Nasz konstruktor, przed wykonaniem swoich operacji, może wywołać inny konstruktor tej samej klasy.
public class A { public A(int i) { System.Console.Write("Najpierw ja " + i); } public A(char c) : this(5) { // wywoła najpierw operacje jak przy tworzeniu new A(5) System.Console.Write("Potem ja " + c); } }Zwracanie wartości this
Zwrócenie wartości this umożliwia łańcuchowe przeprowadzenie operacji na tej samej instancji obiektu:
public class A { public A Oblicz() { // obliczenia return this; } public A Wynik() { // wyświetlanie wyniku return this; } } A a = new A(); a.Oblicz().Wynik(); // dwie operacje na tej samej instancji -
2010-01-31 17:06:54 Dobre i darmowe IDE do C# [zamknięte]










6