|
Kos
|
 |
« Odpowiedz #15 : Sierpień 11, 2009, 10:43:10 » |
|
Czemu mam każdorazowo pod chrome warna bezpieczeństwa gdy wchodzę na ten (i tylko ten) temat? 
|
|
|
|
|
Zapisane
|
Eclipse!
|
|
|
|
Esidar
|
 |
« Odpowiedz #16 : Sierpień 11, 2009, 11:08:56 » |
|
A potem się zastanawiaj, które konkretnie metody w tej sześćdziesiątej siódmej klasie pochodnej są przesłonięte, które są nowo wprowadzonymi metodami wirtualnymi, a które nic z tych dwóch... Oczywiście musisz sprawdzić wszystkie sześćdziesiąt sześć klas bazowych. Ach, jak temu C++ brakuje choćby takiego głupiego override.
Ja się nie muszę zastanawiać. Jeśli w klasie jest "SetPosition" to mnie nie interesuje czy jest wirtualna czy nie i czy ew. wywołuje metodę z klasy bazowej. Jeśli to jest mój kod, to wiem jak to działa, jeśli nie mój kod, to nie obchodzi mnie implementacja. Jeśli chcesz mieć override to sobie zrób "#define override" i wszędzie wklejaj.
|
|
|
|
|
Zapisane
|
|
|
|
|
Liosan
|
 |
« Odpowiedz #17 : Sierpień 11, 2009, 12:06:31 » |
|
...Jeśli to jest mój kod, to wiem jak to działa... Też miałem takie założenie 10 lat temu. Parę lat programowania i myślę inaczej...  Ale Ty przecież też nie od wczoraj piszesz... więc pewnie każdemu co innego przeszkadza. Mi np. przeszkadza przesłanianie  Liosan
|
|
|
|
|
Zapisane
|
w ich zylach plynie praslowianska krew - oni musza wiedziec jak sie robi software Demo WG RC2!
|
|
|
|
Aithne
|
 |
« Odpowiedz #18 : Sierpień 11, 2009, 15:43:21 » |
|
ShadowDancer, jak ci tak bardzo zależy, to zamień to sześćdziesiąt siedem na piętnaście i sześćdziesiąt sześć na czternaście. Wiele to nie zmienia, roboty potem i tak trochę jest.
|
|
|
|
|
Zapisane
|
|
|
|
|
Nargil
|
 |
« Odpowiedz #19 : Sierpień 11, 2009, 17:28:17 » |
|
Ok faktycznie przyznaję się do błędu ;/ Moim zdaniem to jednak trochę nielogiczne. No cóż #include <iostream>
class base { public: virtual void whoAreYou() { std::cout << "base" << std::endl; } };
class ext1 : public base { public: void whoAreYou() { std::cout << "ext1" << std::endl; } };
class ext2 : public ext1 { public: void whoAreYou() { std::cout << "ext2" << std::endl; } };
int _tmain(int argc, _TCHAR* argv[]) { base *b = new base(); ext1 *e1 = new ext1(); ext2 *e2 = new ext2();
b->whoAreYou(); static_cast<base*>(e1)->whoAreYou(); //tu słusznie spodziewałem się "ext2" static_cast<base*>(e2)->whoAreYou();
//tu niesłusznie spodziewałem się "ext1" static_cast<ext1*>(e2)->whoAreYou();
system("pause"); }
tak wygląda output base ext1 ext2 ext2
|
|
|
|
|
Zapisane
|
|
|
|
|
yarpen
|
 |
« Odpowiedz #20 : Sierpień 11, 2009, 18:40:48 » |
|
Kwestia przyzwyczajenia. Dla mnie nielogicznie jest to rozwiazane w C#.
|
|
|
|
|
Zapisane
|
|
|
|
|
|
|
ConayR
|
 |
« Odpowiedz #22 : Październik 13, 2009, 23:50:21 » |
|
Nie w MSVC a w _managed_ C++. To poważna różnica, bo w ten sposób można by się upierać, że C++ to język z grabarzem pamięci.
|
|
|
|
|
Zapisane
|
On the Internet, nobody knows you're a dog
|
|
|
|
bies
|
 |
« Odpowiedz #23 : Październik 14, 2009, 00:36:48 » |
|
(...) w ten sposób można by się upierać, że C++ to język z grabarzem pamięci.
Grabarzem? Chodzi Ci od odśmiecacz? Toż w C++ znam przynajmniej 4, zarówno precyzyjne jak i konserwatywne (Śmieciuch, SGCL, Boehm i jakiś czwarty znaleziony na sf.net). Jeszcze nie widziałem kompaktującego ale wydaję mi się, że przy pewnych założeniach też da się napisać.
|
|
|
|
|
Zapisane
|
|
|
|
|
ConayR
|
 |
« Odpowiedz #24 : Październik 14, 2009, 01:14:02 » |
|
(...) w ten sposób można by się upierać, że C++ to język z grabarzem pamięci.
Grabarzem? Chodzi Ci od odśmiecacz? Toż w C++ znam przynajmniej 4, zarówno precyzyjne jak i konserwatywne (Śmieciuch, SGCL, Boehm i jakiś czwarty znaleziony na sf.net). Jeszcze nie widziałem kompaktującego ale wydaję mi się, że przy pewnych założeniach też da się napisać. Hmm? Ja nie mówię, że nie można - piszę jedynie, że jest różnica między "gołym" C++ a C++/CLR w środowisku MSVC. Dyskusja toczyła się o override w C++ "gołym" (nie napiszę zgodnym ze standardem, bo mi jakiś bojownik GCC kwiatki w ogrodzie podepcze) i stwierdzenie, że MSVC ma override mija się IMO z prawdą.
|
|
|
|
|
Zapisane
|
On the Internet, nobody knows you're a dog
|
|
|
|
bies
|
 |
« Odpowiedz #25 : Październik 14, 2009, 01:46:07 » |
|
(...) stwierdzenie, że MSVC ma override mija się IMO z prawdą.
Ale na override to ja się nie znam (nie używam C++/CLI). Pisałem tylko, że analogia z GC była do bani.
|
|
|
|
|
Zapisane
|
|
|
|
|
ConayR
|
 |
« Odpowiedz #26 : Październik 14, 2009, 01:55:53 » |
|
Czy GC jest wbudowanym ficzerem C++? Nie. Więc analogia poprawna - C++ (bez CLR) nie ma ani grabarza, ani override. I grabarza i override* zaimplementować można, ale nie znaczy to, że jest na dzień dobry dostępny.
Pomijam już logikę "porównałeś A do B; na A się nie znam, ale porównanie do B do bani"...
* metodą opisaną wcześniej w wątku - #define override
|
|
|
|
|
Zapisane
|
On the Internet, nobody knows you're a dog
|
|
|
|
bies
|
 |
« Odpowiedz #27 : Październik 14, 2009, 01:58:54 » |
|
C++ (bez CLR) nie ma ani grabarza, ani override. I grabarza i override* zaimplementować można, ale nie znaczy to, że jest na dzień dobry dostępny.
* metodą opisaną wcześniej w wątku - #define override [podkreślenia moje]
A myślałem, że mówisz poważnie...
|
|
|
|
|
Zapisane
|
|
|
|
|
ConayR
|
 |
« Odpowiedz #28 : Październik 14, 2009, 02:06:11 » |
|
C++ (bez CLR) nie ma ani grabarza, ani override. I grabarza i override* zaimplementować można, ale nie znaczy to, że jest na dzień dobry dostępny.
* metodą opisaną wcześniej w wątku - #define override [podkreślenia moje]
A myślałem, że mówisz poważnie... Rozumiem, że to komentarz poparty wiedzą na temat działania override w C++/CLR?
|
|
|
|
|
Zapisane
|
On the Internet, nobody knows you're a dog
|
|
|
|
siso
|
 |
« Odpowiedz #29 : Październik 14, 2009, 02:18:46 » |
|
C++ (bez CLR) nie ma ani grabarza, ani override. I grabarza i override* zaimplementować można, ale nie znaczy to, że jest na dzień dobry dostępny.
* metodą opisaną wcześniej w wątku - #define override [podkreślenia moje]
A myślałem, że mówisz poważnie... Słuszna uwaga, bies. Nie wystarczy napisać override. To musi być sprawdzenie, inaczej nie ma sensu. W Javie wykłada kompilację.
|
|
|
|
|
Zapisane
|
Otwarty GL / Bezpośredni X
|
|
|
|