logo

Programowanie obiektowe w C++

Programowanie obiektowe – jak sama nazwa wskazuje, wykorzystuje w programowaniu obiekty. Programowanie obiektowe ma na celu wdrożenie w programowaniu jednostek ze świata rzeczywistego, takich jak dziedziczenie, ukrywanie, polimorfizm itp. Głównym celem OOP jest powiązanie danych i funkcji, które na nich operują, tak aby żadna inna część kodu nie mogła uzyskać dostępu do tych danych poza tą funkcją.

Istnieje kilka podstawowych koncepcji, które stanowią podstawę OOP, tj.



  1. Klasa
  2. Obiekty
  3. Kapsułkowanie
  4. Abstrakcja
  5. Wielopostaciowość
  6. Dziedzictwo
  7. Wiązanie dynamiczne
  8. Przekazywanie wiadomości

Charakterystyka języka programowania obiektowego

Koncepcja OOPS w C++

jak zwrócić tablicę Java

Klasa

Cegiełką C++ prowadzącą do programowania obiektowego jest klasa. Jest to typ danych zdefiniowany przez użytkownika, który przechowuje własne elementy danych i funkcje członkowskie, do których można uzyskać dostęp i z których można korzystać, tworząc instancję tej klasy. Klasa jest jak plan obiektu. Na przykład: rozważ klasę samochodów. Może być wiele samochodów o różnych nazwach i markach, ale wszystkie będą miały pewne wspólne właściwości, np. wszystkie będą miały 4 koła, ograniczenie prędkości, zasięg itp. Zatem tutaj samochód to klasa, a koła to ograniczenia prędkości i przebieg są ich właściwościami.

  • Klasa to typ danych zdefiniowany przez użytkownika, który zawiera elementy danych i funkcje składowe.
  • Członkowie danych to zmienne danych, a funkcje członkowskie to funkcje używane do wspólnego manipulowania tymi zmiennymi. Te elementy danych i funkcje członkowskie definiują właściwości i zachowanie obiektów w klasie.
  • W powyższym przykładzie klasy Samochód elementem danych będzie ograniczenie prędkości, przebieg itp., a funkcje członkowskie mogą włączać hamulce, zwiększać prędkość itp.

Możemy powiedzieć, że A Klasa w C++ to plan reprezentujący grupę obiektów, które mają pewne wspólne właściwości i zachowania.



Obiekt

Obiekt to możliwa do zidentyfikowania jednostka posiadająca pewne cechy i zachowanie. Obiekt jest instancją klasy. Kiedy klasa jest zdefiniowana, nie jest przydzielana żadna pamięć, ale podczas jej tworzenia (tj. tworzenia obiektu) pamięć jest przydzielana.

C++
// C++ Program to show the syntax/working of Objects as a // part of Object Oriented PProgramming #include  using namespace std; class person {  char name[20];  int id; public:  void getdetails() {} }; int main() {  person p1; // p1 is a object  return 0; }>

Obiekty zajmują miejsce w pamięci i mają powiązany adres, taki jak rekord w języku pascalowym, struktura lub suma. Kiedy program jest wykonywany, obiekty wchodzą w interakcję poprzez wysyłanie sobie wiadomości. Każdy obiekt zawiera dane i kod umożliwiający manipulowanie danymi. Obiekty mogą wchodzić w interakcje bez konieczności znajomości szczegółów swoich danych lub kodu, wystarczy znać typ akceptowanego komunikatu i typ odpowiedzi zwracanej przez obiekty.

Aby dowiedzieć się więcej o obiektach i klasach C++, zapoznaj się z tym artykułem – Klasy i obiekty C++



Kapsułkowanie

Zwykle enkapsulację definiuje się jako pakowanie danych i informacji w jedną jednostkę. W programowaniu obiektowym enkapsulacja jest definiowana jako łączenie danych i funkcji, które nimi manipulują. Rozważmy rzeczywisty przykład enkapsulacji: w firmie istnieją różne sekcje, takie jak sekcja księgowości, sekcja finansów, sekcja sprzedaży itp. Sekcja finansów obsługuje wszystkie transakcje finansowe i prowadzi rejestr wszystkich danych związanych z finansami. Podobnie dział sprzedaży zajmuje się wszystkimi działaniami związanymi ze sprzedażą i prowadzi ewidencję całej sprzedaży. Teraz może zaistnieć sytuacja, gdy z jakiegoś powodu urzędnik z działu finansowego będzie potrzebował wszystkich danych o sprzedaży w danym miesiącu. W takim wypadku nie ma on bezpośredniego dostępu do danych działu sprzedażowego. Najpierw będzie musiał skontaktować się z innym pracownikiem działu sprzedaży, a następnie poprosić go o podanie konkretnych danych. Na tym właśnie polega enkapsulacja. Tutaj dane sekcji sprzedaży i pracowników, którzy mogą nimi manipulować, są opakowane w pojedynczą sekcję sprzedaży.

Enkapsulacja w C++ z przykładami

Enkapsulacja w C++

Hermetyzacja prowadzi również do abstrakcja danych lub ukrywanie danych . Użycie enkapsulacji powoduje również ukrycie danych. W powyższym przykładzie dane dowolnej sekcji, takiej jak sprzedaż, finanse lub księgowość, są ukryte przed jakąkolwiek inną sekcją.

Aby dowiedzieć się więcej na temat enkapsulacji, zapoznaj się z tym artykułem – Enkapsulacja w C++

Abstrakcja

Abstrakcja danych jest jedną z najważniejszych i najważniejszych cech programowania obiektowego w C++. Abstrakcja oznacza wyświetlenie tylko niezbędnych informacji i ukrycie szczegółów. Abstrakcja danych oznacza dostarczanie światu zewnętrznemu jedynie niezbędnych informacji o danych, ukrywanie szczegółów tła lub implementacji. Rozważmy przykład z życia wzięty, przedstawiający mężczyznę prowadzącego samochód. Człowiek wie tylko, że naciśnięcie pedału przyspieszenia zwiększy prędkość samochodu lub zaciągnięcie hamulca zatrzyma samochód, ale nie wie, w jaki sposób po naciśnięciu pedału przyspieszenia prędkość faktycznie wzrasta, nie wie o wewnętrznym mechanizmie samochodu lub zastosowanie pedału przyspieszenia, hamulców itp. w samochodzie. To jest właśnie abstrakcja.

pierwsze dziecko CSS
  • Abstrakcja przy użyciu klas : Możemy zaimplementować abstrakcję w C++ za pomocą klas. Klasa pomaga nam grupować elementy danych i funkcje członkowskie przy użyciu dostępnych specyfikatorów dostępu. Klasa może zdecydować, który element danych będzie widoczny dla świata zewnętrznego, a który nie.
  • Abstrakcja w plikach nagłówkowych : Jeszcze jednym rodzajem abstrakcji w C++ mogą być pliki nagłówkowe. Rozważmy na przykład metodę pow() obecną w pliku nagłówkowym math.h. Ilekroć musimy obliczyć potęgę liczby, po prostu wywołujemy funkcję pow() znajdującą się w pliku nagłówkowym math.h i przekazujemy liczby jako argumenty, nie znając algorytmu, zgodnie z którym funkcja faktycznie oblicza potęgę liczb .

Aby dowiedzieć się więcej o abstrakcji C++, zapoznaj się z tym artykułem – Abstrakcja w C++

Wielopostaciowość

Słowo polimorfizm oznacza posiadanie wielu form. W prostych słowach możemy zdefiniować polimorfizm jako zdolność komunikatu do wyświetlania w więcej niż jednej formie. Osoba w tym samym czasie może mieć różne cechy. Mężczyzna jest jednocześnie ojcem, mężem i pracownikiem. Zatem ta sama osoba zachowuje się inaczej w różnych sytuacjach. Nazywa się to polimorfizmem. Operacja może wykazywać różne zachowania w różnych przypadkach. Zachowanie zależy od typów danych używanych w operacji. C++ obsługuje przeciążanie operatorów i przeciążanie funkcji.

  • Przeciążenie operatora : Proces powodujący, że operator wykazuje różne zachowania w różnych przypadkach, nazywany jest przeciążeniem operatora.
  • Przeciążenie funkcji : Przeciążanie funkcji polega na używaniu jednej nazwy funkcji do wykonywania różnych typów zadań. Polimorfizm jest szeroko stosowany w implementacji dziedziczenia.

Przykład : Załóżmy, że musimy napisać funkcję dodającą kilka liczb całkowitych, czasami są to 2 liczby całkowite, a czasami są to 3 liczby całkowite. Metodę dodawania możemy napisać o tej samej nazwie i różnych parametrach, dana metoda zostanie wywołana zgodnie z parametrami.

Polimorfizm w C++ z przykładem

Polimorfizm w C++

Aby dowiedzieć się więcej o polimorfizmie, zapoznaj się z tym artykułem – Polimorfizm w C++

Dziedzictwo

Zdolność klasy do wyprowadzania właściwości i charakterystyk z innej klasy nazywa się Dziedzictwo . Dziedziczenie jest jedną z najważniejszych cech programowania obiektowego.

  • Podklasa : Klasa, która dziedziczy właściwości innej klasy, nazywana jest klasą podrzędną lub klasą pochodną.
  • Super klasa : Klasa, której właściwości są dziedziczone przez podklasę, nazywana jest klasą bazową lub nadklasą.
  • Możliwość ponownego użycia : Dziedziczenie wspiera koncepcję ponownego użycia, tj. gdy chcemy utworzyć nową klasę i istnieje już klasa zawierająca część potrzebnego nam kodu, możemy wyprowadzić naszą nową klasę z istniejącej klasy. W ten sposób ponownie wykorzystujemy pola i metody istniejącej klasy.

Przykład : Pies, Kot, Krowa mogą być klasą pochodną klasy podstawowej zwierzęcia.

Dziedziczenie w C++ z przykładem

Dziedziczenie w C++

Aby dowiedzieć się więcej na temat dziedziczenia, zapoznaj się z tym artykułem – Dziedziczenie w C++

vlc pobieraj filmy z YouTube'a

Wiązanie dynamiczne

W przypadku wiązania dynamicznego kod, który ma zostać wykonany w odpowiedzi na wywołanie funkcji, jest ustalany w czasie wykonywania. C++ ma funkcje wirtualne wspierać to. Ponieważ wiązanie dynamiczne jest elastyczne, pozwala uniknąć wad wiązania statycznego, które łączyło wywołanie funkcji i definicję w czasie kompilacji.

Przykład:

C++
// C++ Program to Demonstrate the Concept of Dynamic binding // with the help of virtual function #include  using namespace std; class GFG { public:  void call_Function() // function that call print  {  print();  }  void print() // the display function  {  cout << 'Printing the Base class Content' << endl;  } }; class GFG2 : public GFG // GFG2 inherit a publicly { public:  void print() // GFG2's display  {  cout << 'Printing the Derived class Content'  << endl;  } }; int main() {  GFG geeksforgeeks; // Creating GFG's object  geeksforgeeks.call_Function(); // Calling call_Function  GFG2 geeksforgeeks2; // creating GFG2 object  geeksforgeeks2.call_Function(); // calling call_Function  // for GFG2 object  return 0; }>

Wyjście
Printing the Base class Content Printing the Base class Content>

Jak widzimy, funkcja print() klasy nadrzędnej jest wywoływana nawet z obiektu klasy pochodnej. Aby rozwiązać ten problem, używamy funkcji wirtualnych.

Powyższy przykład z funkcją wirtualną:

C++
#include using namespace std; class GFG { public:  void call_Function() // function that call print  {  print();  }  virtual void print() // using 'virtual' for the display function   {  cout << 'Printing the Base class Content' << endl;  } }; class GFG2 : public GFG // GFG2 inherit a publicly { public:  void print() // GFG2's display  {  cout << 'Printing the Derived class Content'  << endl;  } }; int main() {  GFG geeksforgeeks; // Creating GFG's object  geeksforgeeks.call_Function(); // Calling call_Function  GFG2 geeksforgeeks2; // creating GFG2 object  geeksforgeeks2.call_Function(); // calling call_Function  // for GFG2 object  return 0; } //this code is contributed by Md Nizamuddin>

Wyjście
Printing the Base class Content Printing the Derived class Content>


Przekazywanie wiadomości

Obiekty komunikują się ze sobą poprzez wysyłanie i odbieranie informacji. Komunikat dla obiektu jest żądaniem wykonania procedury i dlatego wywołuje w obiekcie odbierającym funkcję, która generuje pożądane wyniki. Przekazywanie wiadomości polega na określeniu nazwy obiektu, nazwy funkcji i informacji, które mają zostać wysłane.

Przykład:

C++
#include  using namespace std; // Define a Car class with a method to display its speed class Car { public:  void displaySpeed(int speed) {  cout << 'The car is moving at ' << speed << ' km/h.' << endl;  } }; int main() {  // Create a Car object named myCar  Car myCar;  // Send a message to myCar to execute the displaySpeed method  int currentSpeed = 100;  myCar.displaySpeed(currentSpeed);  return 0; } //this code is contributed by Md Nizamuddin>


Powiązane artykuły :