#cpp ma ktoś jakiś poradnik odnosnie plików dodatkowych do c++? chodzi mi o pliki *.h i inne w projekcie visual studio. Proste pch.h ograniam, ale jak robić swoje i po co? #programowanie
@selenita66: pliki nagłówkowe zawierające deklaracje metod - pisane zgodnie z zaleceniami powinny zawierać publiczne składniki klas tworząc defacto API co czyni je interfejsami
te elementy mnie interesują, wiem po co jest pch.h, ale jak i po co swój plik nagłówkowy, bądź pliki zasobów lub źródłowe, jak i kiedy używamy tego (w końcu czas podniesć poziom programisty z technikum)
@wielki_wodzu_wioski: poprawiłem tag, dzięki. Ogółem pierwszy raz widzę coś co zaczyna się jako #pragma once i inne takie, mimotego program ze screena naprawiłem znajomkowi, ale nie do konca wiem co zrobiłem, dlatego nie pytam o gotową odpowiedz, tylko czy ktos ma jakis poradnik odnosnie plikow nagłówkowych i innych takich
@powaznyczlowiek: Interfejsy to nie ten język :D. Rolę interfejsów w c++ pełnią klasy abstrakcyjne, plik .h musi posiadać implementację.
@Cyganowski Ogólnie naucz się czym jest programowanie obiektowe, czym jest klasa. Klasy w c++ dzielą się na pliki nagłówkowe (.h/.hpp-> header) i źródłowe ( .cpp). W skrócie, w pliku .h wypisujesz listę zmiennych które się w tej klasie zawierają i deklaracje metod (funkcji). Deklaracja mówi tylko że taka konkretna metoda, o nazwie
@Cyganowski: pragma once to strażnik nagłówków. Robiąc # include "abc.h", preprocesor wklei zawartość pliku abc.h w miejsce tej deklaracji. # pragma once (albo zestaw # ifdef # endif) pilnuje, żeby pliki .h nie były wklejane wielokrotnie.
Rolę interfejsów w c++ pełnią klasy abstrakcyjne, plik .h musi posiadać implementację.
@Reevo: a klasa abstrakcyjna (virtual) nie musi? ( ͡º͜ʖ͡º) klasa abstrakcyjna nie jest interfejsem, gdyż interfejs z definicji jest zbiorem publicznych składników, do których możesz się odwołać, a klasa abstrakcyjna może trzymać stan w polach oraz implementować sama z siebie logikę - nic nie stoi też chyba na przeszkodzie żeby stworzyć plik nagłówkowy
@Reevo: no i takiemu stawiam piwo! Wielkie dzięki za podpowiedź, ogarnę sprawę. Programowania nie tyle co zaczynam, ale skupiłem się bardziej (za bardzo) na opanowaniu jednego pliku cpp. Code blocks osobiście średnio lubię ale tez używam, a tak to wolę pracę na kombajnie ;P
aktualnie na studiach mam programowanie w jednym pliku cpp i dla reszty grupy robię za 'guru', ale chcę być jednak ten krok do przodu względem reszty (czyli ogarniać pliki nagłówka itp zanim oni dojdą do tego)
@powaznyczlowiek: Sama klasa abstrakcyjna nie musi mieć implementacji, ponieważ może składać się z funkcji czysto wirtualnych, a implementacja będzie dopiero w klasie dziedziczącej. Nie wiem na ile to się pokrywa ze współczesnymi interfejsami, Java HIV (⌐͡■͜ʖ͡■). Poza tym, plik nagłówkowy musi być zawsze, pliki źródłowy nie, można umieścić definicję od razu w nagłówku.
Pliki nagłówkowe/źródłowe nie mają nic wspólnego z semantyką języka, jest
@Cyganowski: W dużym uproszczeniu, pozwala szybko przelecieć kod wzrokiem, zrozumieć co robi, bez zagłębiania się w to jak to robi.
Jest też kwestia 'filozoficzna' o której warto pamiętać, czyli ukrycie implementacji. Chodzi o to że jeżeli masz funkcję void saveFile(string savePath); w pliku .h, to z niej korzystasz i nie interesuje Cię co jest w pliku .cpp. Dzięki temu, gdy pisząc duże programy, będziesz mógł podmienić implementację (bo inaczej zapisuje się
@Cyganowski: Co?
@powaznyczlowiek: Co?^2
Ogółem pierwszy raz widzę coś co zaczyna się jako #pragma once i inne takie, mimotego program ze screena naprawiłem znajomkowi, ale nie do konca wiem co zrobiłem, dlatego nie pytam o gotową odpowiedz, tylko czy ktos ma jakis poradnik odnosnie plikow nagłówkowych i innych takich
@Cyganowski Ogólnie naucz się czym jest programowanie obiektowe, czym jest klasa. Klasy w c++ dzielą się na pliki nagłówkowe (.h/.hpp-> header) i źródłowe ( .cpp). W skrócie, w pliku .h wypisujesz listę zmiennych które się w tej klasie zawierają i deklaracje metod (funkcji). Deklaracja mówi tylko że taka konkretna metoda, o nazwie
@Reevo: a klasa abstrakcyjna (virtual) nie musi? ( ͡º ͜ʖ͡º) klasa abstrakcyjna nie jest interfejsem, gdyż interfejs z definicji jest zbiorem publicznych składników, do których możesz się odwołać, a klasa abstrakcyjna może trzymać stan w polach oraz implementować sama z siebie logikę - nic nie stoi też chyba na przeszkodzie żeby stworzyć plik nagłówkowy
Pliki nagłówkowe/źródłowe nie mają nic wspólnego z semantyką języka, jest
Jest też kwestia 'filozoficzna' o której warto pamiętać, czyli ukrycie implementacji. Chodzi o to że jeżeli masz funkcję void saveFile(string savePath); w pliku .h, to z niej korzystasz i nie interesuje Cię co jest w pliku .cpp. Dzięki temu, gdy pisząc duże programy, będziesz mógł podmienić implementację (bo inaczej zapisuje się
jak nie masz "return 0;" czytaj jako nie zwracasz wartości (int) do systemu,to możesz napisać samo 'main()'