Nie przytulaj mnie, boję się [ENG]
Część pierwsza edukacyjnej serii dla najmłodszych - i nie tylko! Oglądajcie do końca ;)
Nie przytulaj mnie, boję się [ENG]
Część pierwsza edukacyjnej serii dla najmłodszych - i nie tylko! Oglądajcie do końca ;)
Nie przytulaj mnie, bo się boję [ENG]
Część pierwsza edukacyjnej serii dla najmłodszych - i nie tylko! Oglądajcie do końca ;)
preview 0 comments Humor Jezor youtube.com 0
Nie przytulaj mnie, bo się boję [ENG]
Część pierwsza edukacyjnej serii dla najmłodszych - i nie tylko! Oglądajcie do końca ;)
preview 0 comments Humor Jezor youtube.com 0
C++, "forward declarations"
Czy ktoś może mi to wytłumaczyć, bo ni cholery nie potrafię tego zrozumieć?
Myk polega na tym, żeby nie walić #include do każdego pliku, tylko napisać deklarację używanych w nim funkcji / klas. Ale nadal gdzieś musimy dać to #include mimo wszystko...
Załóżmy, że mamy takie przykładowe pliczki:
/ A.hpp /
class A {
public:
A();
B getB();
}
/ A.cpp /
#include "A.hpp"
A::A() {}
B A::getB() { B b; return b; }
/ B.hpp /
class B {
public:
B();
}
/ B.cpp /
#include "B.hpp"
B::B() {}
No i wszystko spoko, ale kiedy chcemy skorzystać z klasy A, musimy dać #include do pliku B.hpp:
/ main.cpp /
#include "A.hpp"
#include "B.hpp" // bez tego nie zadziała
int main () {
A a;
a.getB();
return 0;
}
Co nam to daje, że nie daliśmy tego wcześniej?
I jaki ma sens taki podział na pliki, skoro chcemy użyć tylko klasy A i nie powinno nas interesować, skąd A bierze B?
jak najmniej używam #include w pliku .hpp
@onyx: ale nadal czasem trzeba, np. w przypadku std::string. Więc jakieś tam #include w pliku nagłówkowym czasem się pojawi, a przez to robi się wg mnie drobny bałagan.
Zresztą popatrzmy na plik nagłówkowy ze standardowych bibliotek, np. iostream. Często są w nich #include dodawane...
C++, "forward declarations"
Czy ktoś może mi to wytłumaczyć, bo ni cholery nie potrafię tego zrozumieć?
Myk polega na tym, żeby nie walić #include do każdego pliku, tylko napisać deklarację używanych w nim funkcji / klas. Ale nadal gdzieś musimy dać to #include mimo wszystko...
Załóżmy, że mamy takie przykładowe pliczki:
/ A.hpp /
class A {
public:
A();
B getB();
}
/ A.cpp /
#include "A.hpp"
A::A() {}
B A::getB() { B b; return b; }
/ B.hpp /
class B {
public:
B();
}
/ B.cpp /
#include "B.hpp"
B::B() {}
No i wszystko spoko, ale kiedy chcemy skorzystać z klasy A, musimy dać #include do pliku B.hpp:
/ main.cpp /
#include "A.hpp"
#include "B.hpp" // bez tego nie zadziała
int main () {
A a;
a.getB();
return 0;
}
Co nam to daje, że nie daliśmy tego wcześniej?
I jaki ma sens taki podział na pliki, skoro chcemy użyć tylko klasy A i nie powinno nas interesować, skąd A bierze B?
jak najmniej używam #include w pliku .hpp
@onyx: ale nadal czasem trzeba, np. w przypadku std::string. Więc jakieś tam #include w pliku nagłówkowym czasem się pojawi, a przez to robi się wg mnie drobny bałagan.
Zresztą popatrzmy na plik nagłówkowy ze standardowych bibliotek, np. iostream. Często są w nich #include dodawane...
@spam_only: chyba już mam :P
Jest niby to nouveau-fw, ale chyba dla mnie niczego nie zmienia?
Kolejny log, jakby Ci się chciało przeglądać :P
Dzięki za tego linka, zaraz przetestuję! Działa :D
@spam_only: chyba już mam :P
Jest niby to nouveau-fw, ale chyba dla mnie niczego nie zmienia?
Kolejny log, jakby Ci się chciało przeglądać :P
Dzięki za tego linka, zaraz przetestuję! Działa :D
@Kokofon: reszta świata nie ma problemu z nazywaniem Włochów italianami, ale czy nam to przeszkadza? :D
@Kokofon: reszta świata nie ma problemu z nazywaniem Włochów italianami, ale czy nam to przeszkadza? :D
C++, "forward declarations"
Czy ktoś może mi to wytłumaczyć, bo ni cholery nie potrafię tego zrozumieć?
Myk polega na tym, żeby nie walić #include do każdego pliku, tylko napisać deklarację używanych w nim funkcji / klas. Ale nadal gdzieś musimy dać to #include mimo wszystko...
Załóżmy, że mamy takie przykładowe pliczki:
/ A.hpp /
class A {
public:
A();
B getB();
}
/ A.cpp /
#include "A.hpp"
A::A() {}
B A::getB() { B b; return b; }
/ B.hpp /
class B {
public:
B();
}
/ B.cpp /
#include "B.hpp"
B::B() {}
No i wszystko spoko, ale kiedy chcemy skorzystać z klasy A, musimy dać #include do pliku B.hpp:
/ main.cpp /
#include "A.hpp"
#include "B.hpp" // bez tego nie zadziała
int main () {
A a;
a.getB();
return 0;
}
Co nam to daje, że nie daliśmy tego wcześniej?
I jaki ma sens taki podział na pliki, skoro chcemy użyć tylko klasy A i nie powinno nas interesować, skąd A bierze B?
@onyx: no ale właśnie, skoro nie może założyć z góry jak duży jest wskaźnik, to nadal mu nic nie daje... Dlatego nadal nie rozumiem, jak ma się zmniejszyć czas kompilacji, skoro jedyne co kompilatorowi zapewniamy to rozróżnienie czym jest dany symbol... Nie widzę żadnych plusów z używania niekompletnych deklaracji, za to widzę same minusy - np. niektóre #include w plikach .cpp zamiast .hpp, nie wiadomo gdzie ich szukać w kodzie...