Wszystkie dotychczasowe odpowiedzi koncentrowały się na temacie twojego pytania, jak stwierdzono: „jaka jest różnica między c i c ++”. W rzeczywistości wygląda na to, że wiesz, czym jest różnica, po prostu nie rozumiesz, dlaczego taka różnica jest potrzebna. Zatem inne odpowiedzi próbowały wyjaśnić OO i enkapsulację.
Chciałem odpowiedzieć na jeszcze jedną odpowiedź, ponieważ na podstawie szczegółów twojego pytania uważam, że musisz cofnąć się o kilka kroków.
Nie rozumiesz celu C ++ lub OO, ponieważ wydaje ci się, że Twoja aplikacja po prostu musi przechowywać dane. Te dane są przechowywane w zmiennych. „Dlaczego miałbym chcieć, aby zmienna była niedostępna? Teraz nie mam już do niej dostępu! Dzięki upublicznieniu wszystkiego, a jeszcze lepiej globalizacji, mogę czytać dane z dowolnego miejsca i nie ma żadnych problemów”. - I masz rację, biorąc pod uwagę skalę projektów, które obecnie piszesz, prawdopodobnie nie ma tak wielu problemów (lub jest ich, ale po prostu jeszcze ich nie zauważyłeś).
Myślę, że podstawowe pytanie, na które naprawdę musisz odpowiedzieć, brzmi: „Dlaczego miałbym kiedykolwiek chcieć ukryć dane? Jeśli to zrobię, nie będę w stanie z tym pracować!” I dlatego:
Załóżmy, że zaczynasz nowy projekt, otwierasz edytor tekstu i zaczynasz pisać funkcje. Za każdym razem, gdy musisz coś zapisać (aby zapamiętać na później), tworzysz zmienną. Aby uprościć sprawę, zmienne są globalne. Twoja pierwsza wersja Twojej aplikacji działa świetnie. Teraz zaczynasz dodawać więcej funkcji. Masz więcej funkcji, niektóre dane, które wcześniej zapisałeś, muszą zostać odczytane z nowego kodu. Inne zmienne wymagają modyfikacji. Ciągle piszesz więcej funkcji. To, co mogłeś zauważyć (a jeśli nie, to absolutnie zauważysz w przyszłości), to fakt, że w miarę powiększania się kodu, dodanie kolejnej funkcji zajmuje coraz więcej czasu. W miarę powiększania się kodu, coraz trudniej jest dodawać funkcje bez zepsucia czegoś, co kiedyś działało. Dlaczego? Ponieważ musisz pamiętać, co wszystkotwoje zmienne globalne są przechowywane i musisz pamiętać, gdzie wszystkie są modyfikowane. I musisz pamiętać, która funkcja jest w porządku, aby wywoływać w dokładnej kolejności, a jeśli wywołasz je w innej kolejności, możesz otrzymać błędy, ponieważ twoje zmienne globalne nie są jeszcze poprawne. Czy kiedykolwiek na to wpadłeś?
Jak duże są twoje typowe projekty (wiersze kodu)? Teraz obrazuje projekt 5000 do 50000 razy większy niż twój. Ponadto pracuje w nim wiele osób. Jak wszyscy członkowie zespołu mogą pamiętać (a nawet być świadomi) tego, co robią wszystkie te zmienne?
To, co opisałem powyżej, jest przykładem doskonale sprzężonego kodu. A od zarania dziejów (zakładając, że czas zaczął się 1 stycznia 1970 r.) Ludzkość szuka sposobów na uniknięcie tych problemów. Aby tego uniknąć, należy podzielić swój kod na systemy, podsystemy i komponenty oraz ograniczyć liczbę funkcji mających dostęp do dowolnej części danych. Jeśli mam 5 liczb całkowitych i ciąg znaków reprezentujący pewien stan, czy łatwiej byłoby mi pracować z tym stanem, gdyby tylko 5 funkcji ustawiło / otrzymało wartości? lub jeśli 100 funkcji ustawia / otrzymuje te same wartości? Nawet bez języków OO (tj. C) ludzie ciężko pracowali nad izolowaniem danych od innych danych i tworzeniem czystych granic separacji między różnymi częściami kodu. Gdy projekt osiągnie określony rozmiar, łatwość programowania staje się niemożliwa: „czy mogę uzyskać dostęp do zmiennej X z funkcji Y”,
Właśnie dlatego wprowadzono koncepcje OO i dlatego są tak potężne. Pozwalają ukryć twoje dane przed sobą i chcesz to zrobić celowo, ponieważ im mniej kodu widzi te dane, tym mniejsza szansa, że kiedy dodasz następną funkcję, coś zepsujesz. Jest to główny cel koncepcji enkapsulacji i programowania OO. Pozwalają rozbić nasze systemy / podsystemy na jeszcze bardziej szczegółowe pola, do tego stopnia, że bez względu na to, jak duży jest cały projekt, do danego zestawu zmiennych można uzyskać dostęp tylko za pomocą 50-200 linii kodu i to wszystko! Programowanie OO ma oczywiście znacznie więcej, ale w gruncie rzeczy właśnie dlatego C ++ oferuje opcje deklarowania danych / funkcji jako prywatne, chronione lub publiczne.
Drugim największym pomysłem w OO jest koncepcja warstw abstrakcji. Chociaż języki proceduralne mogą mieć również abstrakcje, w C programista musi podjąć świadomy wysiłek, aby utworzyć takie warstwy, ale w C ++, kiedy deklarujesz klasę, automatycznie tworzysz warstwę abstrakcji (to nadal zależy od tego, czy ta abstrakcja będzie, czy nie) doda lub usunie wartość). Powinieneś przeczytać / zbadać więcej na temat warstw abstrakcji, a jeśli masz więcej pytań, jestem pewien, że to forum z przyjemnością na nie odpowie.