C++ Klasa i obiekt z przykładem
Co to jest klasa?
A C++ klasa łączy dane i metody manipulowania danymi w jedno. Zajęcia określają także formy przedmiotów. Dane i metody zawarte w klasie nazywane są członkami klasy. Klasa to typ danych zdefiniowany przez użytkownika. Aby uzyskać dostęp do członków klasy, używamy instancji klasy. Klasę można postrzegać jako plan obiektu.
Klasa może być prototypem domu. Pokazuje lokalizację i rozmiary drzwi, okien, podłóg itp. Na podstawie tych opisów możemy zbudować dom. Dom staje się obiektem. Możliwe jest utworzenie wielu domów z prototypu. Ponadto możliwe jest utworzenie wielu obiektów z klasy.
Na powyższym rysunku mamy prototyp pojedynczego domu. Na podstawie tego prototypu stworzyliśmy dwa domy o różnych funkcjach.
Deklaracja klasy
W C+ klasa jest definiowana za pomocą słowa kluczowego class. Po tym powinna nastąpić nazwa klasy. Następnie treść klasy zostaje dodana pomiędzy nawiasami klamrowymi { }.
Składnia
class class-name { // data // functions };
- Nazwa klasy to nazwa, którą należy przypisać do klasy.
- Dane to dane klasy, zwykle deklarowane jako zmienne.
- Funkcje są funkcjami klas.
Prywatne i publiczne słowa kluczowe
Zapewne spotkałeś się z tymi dwoma słowami kluczowymi. Są modyfikatorami dostępu.
- Private:
Kiedy słowo kluczowe private jest używane do definiowania funkcji lub klasy, staje się ono prywatne. Są one dostępne tylko z poziomu klasy.
- Publiczny:
Z drugiej strony słowo kluczowe public upublicznia dane/funkcje. Są one dostępne spoza klasy.
Definicja obiektu
Obiekty tworzone są z klas. Obiekty klas deklaruje się w podobny sposób, jak deklaruje się zmienne. Nazwa klasy musi się zaczynać, po której następuje nazwa obiektu. Obiekt typu klasy.
Składnia
class-name object-name;
- Nazwa klasy to nazwa klasy, z której ma zostać utworzony obiekt.
- Nazwa-obiektu to nazwa, która ma zostać przypisana nowemu obiektowi.
Ten proces tworzenia obiektu z klasy nazywany jest tworzeniem instancji.
Dostęp do członków danych
Aby uzyskać dostęp do publicznych członków klasy, używamy operatora (.)dot. Są to członkowie oznaczeni modyfikatorem public access.
1 przykład
#include <iostream> using namespace std; class Phone { public: double cost; int slots; }; int main() { Phone Y6; Phone Y7; Y6.cost = 100.0; Y6.slots = 2; Y7.cost = 200.0; Y7.slots = 2; cout << "Cost of Huawei Y6 : " << Y6.cost << endl; cout << "Cost of Huawei Y7 : " << Y7.cost << endl; cout << "Number of card slots for Huawei Y6 : " << Y6.slots << endl; cout << "Number of card slots for Huawei Y7 : " << Y7.slots << endl; return 0; }
Wyjście:
Oto zrzut ekranu kodu:
Objaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
- Dołączenie przestrzeni nazw std do naszego kodu, aby móc używać jej klas bez wywoływania jej.
- Zadeklaruj klasę o nazwie Phone.
- Użyj modyfikatora dostępu publicznego, aby oznaczyć zmienne, które mamy zamiar utworzyć, jako publicznie dostępne.
- Zadeklaruj koszt zmienny typu danych double.
- Zadeklaruj zmienną całkowitą o nazwie slots.
- Koniec treści zajęć.
- Wywołanie funkcji main(). Logikę programu należy dodać w jego treści.
- Utwórz obiekt o nazwie Y6 typu Telefon. Nazywa się to instancją.
- Utwórz obiekt o nazwie Y7 typu Telefon. Nazywa się to instancją.
- Uzyskaj dostęp do kosztu zmiennego/elementowego klasy Phone za pomocą obiektu Y6. Wartość jest ustawiona na 100.0. Koszt Y6 jest teraz ustawiony na 100.0.
- Uzyskaj dostęp do slotów zmiennych/elementów klasy Phone za pomocą obiektu Y6. Wartość jest ustawiona na 2. Sloty dla Y6 są teraz ustawione na 2.
- Uzyskaj dostęp do kosztu zmiennego/elementowego klasy Phone za pomocą obiektu Y7. Wartość jest ustawiona na 200.0. Koszt Y7 jest teraz ustawiony na 200.0.
- Uzyskaj dostęp do slotów zmiennych/elementów klasy Phone za pomocą obiektu Y7. Wartość jest ustawiona na 2. Sloty dla Y7 są teraz ustawione na 2.
- Wydrukuj koszt Y6 na konsoli wraz z innym tekstem.
- Wydrukuj koszt Y7 na konsoli wraz z innym tekstem.
- Wydrukuj liczbę miejsc dla Y6 wraz z innym tekstem.
- Wydrukuj liczbę miejsc dla Y7 wraz z innym tekstem.
- Program musi zwrócić wartość po pomyślnym zakończeniu.
- Koniec treści funkcji main().
Co to są zajęcia prywatne?
Dostęp do elementów klasy oznaczonych jako prywatne można uzyskać wyłącznie za pomocą funkcji zdefiniowanych w klasie. Żaden obiekt lub funkcja zdefiniowana poza klasą nie może uzyskać bezpośredniego dostępu do takich elementów. Dostęp do członka klasy prywatnej mają tylko funkcje członkowskie i przyjacielskie.
Co to jest klasa chroniona?
Członkowie klasy oznaczeni jako chronieni mają przewagę nad tymi oznaczonymi jako prywatne. Dostęp do nich można uzyskać za pomocą funkcji znajdujących się w klasie, w której są zdefiniowane. Ponadto można uzyskać do nich dostęp z klas pochodnych.
2 przykład
#include <iostream> using namespace std; class ClassA { public: void set_a(int val); int get_a(void); private: int a; }; int ClassA::get_a(void) { return a; } void ClassA::set_a(int val) { a = val; } int main() { ClassA a; a.set_a(20); cout << "Value of a is: " << a.get_a(); return 0; }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
- Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
- Utwórz klasę o nazwie ClassA.
- Użyj modyfikatora dostępu publicznego, aby oznaczyć członka klasy, który ma zostać utworzony, jako publicznie dostępny.
- Utwórz funkcję o nazwie set_a(), która przyjmuje jedną wartość całkowitą val.
- Utwórz funkcję o nazwie get_a().
- Użyj modyfikatora dostępu prywatnego, aby oznaczyć członka klasy, który ma zostać utworzony, jako dostępny prywatnie.
- Zadeklaruj zmienną całkowitą o nazwie a.
- Koniec treści zajęć.
- Użyj nazwy klasy i operatora rozdzielczości zakresu, aby uzyskać dostęp do funkcji get_a(). Chcemy zdefiniować, co funkcja robi po wywołaniu.
- Funkcja get_a() powinna po wywołaniu zwrócić wartość zmiennej a.
- Koniec definicji funkcji get_a().
- Użyj nazwy klasy i operatora rozdzielczości zakresu, aby uzyskać dostęp do funkcji set_a(). Chcemy zdefiniować, co funkcja robi po wywołaniu.
- Przypisanie wartości zmiennej val zmiennej a.
- Koniec definicji funkcji set_a().
- Wywołaj funkcję main(). Logikę programu należy dodać w treści tej funkcji.
- Utwórz instancję klasy A i nadaj jej nazwę a.
- Użyj powyższej instancji klasy i funkcji set_a(), aby przypisać wartość 20 do zmiennej a.
- Drukowanie tekstu obok wartości zmiennej a na konsoli. Wartość zmiennej a uzyskujemy wywołując funkcję get_a().
- Program musi zwrócić wartość po pomyślnym zakończeniu.
- Koniec treści funkcji main().
3 przykład
#include <iostream> using namespace std; class ParentClass { protected: int value; }; class ChildClass : public ParentClass { public: void setId(int x) { value = x; } void displayValue() { cout << "Value is: " << value << endl; } }; int main() { ChildClass c; c.setId(21); c.displayValue(); return 0; }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
- Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
- Utwórz klasę o nazwie ParentClass.
- Użyj chronionego modyfikatora dostępu, aby oznaczyć element klasy, który ma zostać utworzony, jako chroniony.
- Utwórz zmienną całkowitą o nazwie wartość.
- Koniec treści zajęć.
- Utwórz nową klasę o nazwie ChildClass, która dziedziczy klasę ParentClass.
- Użyj chronionego modyfikatora dostępu, aby oznaczyć członka klasy, który ma zostać utworzony, jako dostępny dla klas podrzędnych.
- Utwórz funkcję o nazwie setId(), która przyjmuje jedną wartość całkowitą x.
- Przypisanie wartości zmiennej x do wartości zmiennej.
- Koniec definicji funkcji setId().
- Utwórz funkcję o nazwie displayValue().
- Wydrukuj wartość zmiennej o nazwie wartość na konsoli wraz z innym tekstem.
- Koniec treści funkcji displayValue().
- Koniec treści klasy o nazwie ChildClass.
- Wywołaj funkcję main(). Logikę programu należy dodać w treści tej funkcji.
- Utwórz instancję ChildClass i nadaj jej nazwę c.
- Użyj powyższej instancji klasy i funkcji setId(), aby przypisać wartość 21 do zmiennej x.
- Użyj powyższej instancji klasy, aby wywołać funkcję o nazwie displayValue().
- Program musi zwrócić wartość po pomyślnym zakończeniu.
- Koniec treści funkcji main().
Funkcje członkowskie klasy
Funkcje pomagają nam manipulować danymi. Funkcje składowe klasy można zdefiniować na dwa sposoby:
- Wewnątrz definicji klasy
- Poza definicją klasy
Jeśli funkcja ma być zdefiniowana poza definicją klasy, musimy użyć operatora rozdzielczości zakresu (::). Powinien on być uzupełniony nazwami klasy i funkcji.
2 przykład
#include <iostream> #include <string> using namespace std; class Guru99 { public: string tutorial_name; int id; void printname(); void printid() { cout << "Tutorial id is: "<< id; } }; void Guru99::printname() { cout << "Tutorial name is: " << tutorial_name; } int main() { Guru99 guru99; guru99.tutorial_name = "C++"; guru99.id = 1001; guru99.printname(); cout << endl; guru99.printid(); return 0; }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream do naszego programu, aby móc korzystać z jego funkcji.
- Dołącz plik nagłówkowy ciągu znaków do naszego programu, aby móc korzystać z jego funkcji.
- Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
- Utwórz klasę o nazwie Guru99.
- Użyj modyfikatora dostępu publicznego, aby oznaczyć elementy klasy, które zamierzamy utworzyć, jako publicznie dostępne.
- Utwórz zmienną łańcuchową o nazwie nazwa_samouczka.
- Utwórz zmienną całkowitą o nazwie id.
- Utwórz funkcję o nazwie printname(). Ta funkcja nie jest zdefiniowana w definicji klasy.
- Utwórz funkcję o nazwie print(). Funkcja ta jest zdefiniowana w definicji klasy. Jej treść została dodana w definicji klasy.
- Wydrukuj wartość zmiennej id wraz z innym tekstem na konsoli. Zauważ, że zostało to dodane w treści funkcji printid(). Zostanie ona wykonana tylko wtedy, gdy zostanie wywołana funkcja printid().
- Koniec treści funkcji printid().
- Koniec treści klasy Guru99.
- Początek definicji funkcji printname().
- Wydrukuj wartość zmiennej nazwa_samouczka na konsoli wraz z innym tekstem. Zauważ, że zostało to dodane w treści funkcji printname(). Zostanie ona wykonana tylko wtedy, gdy zostanie wywołana funkcja printname().
- Koniec definicji funkcji printname().
- Wywołaj funkcję main(). Logikę programu należy dodać w treści tej funkcji.
- Utwórz instancję klasy Guru99 i nadaj jej nazwę guru99.
- Użyj powyższej instancji, aby przypisać wartość C++ do zmiennej nazwa_samouczka.
- Użyj instancji guru99, aby przypisać wartość 1001 do zmiennej id.
- Użyj instancji guru99, aby wywołać funkcję printname() .
- Wywołaj polecenie end (end line), aby wydrukować nową pustą linię na konsoli.
- Użyj instancji guru99, aby wywołać funkcję printid().
- Program musi zwrócić wartość po pomyślnym zakończeniu.
- Koniec treści funkcji main().
Konstruktory i destruktory
Co to jest Konstruktorzy?
Konstrukcje to specjalne funkcje inicjujące obiekty. The C++ kompilatory wywołuje konstruktora podczas tworzenia obiektu. Konstruktory pomagają przypisywać wartości członkom klasy. Oczywiście dzieje się to po przydzieleniu im części pamięci.
Co to jest destruktory?
Z drugiej strony destruktory pomagają niszczyć obiekty klas.
Nazwa konstruktora musi być podobna do nazwy klasy. Konstruktory nie mają typu zwracanego.
Konstruktor może być zdefiniowany wewnątrz lub na zewnątrz ciała klasy. Jeśli jest zdefiniowany poza ciałem klasy, powinien być zdefiniowany z nazwą klasy i operatorem rozdzielczości zakresu (::).
3 przykład
#include <iostream> using namespace std; class ClassA { public: ClassA() { cout << "Class constructor called"<<endl; } ~ClassA() { cout << "Class destructor called"<<endl; } }; int main() { ClassA a; int p = 1; if (p) { ClassA b; } }
Wyjście:
Oto zrzut ekranu kodu:
Wyjaśnienie kodu:
- Dołącz plik nagłówkowy iostream do kodu, aby móc korzystać z jego funkcji.
- Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
- Utwórz klasę o nazwie ClassA.
- Użyj modyfikatora dostępu publicznego, aby oznaczyć członka, który mamy zamiar utworzyć, jako publicznie dostępny.
- Utwórz konstruktor dla klasy.
- Tekst do wydrukowania na konsoli po wywołaniu konstruktora. Koniec jest a C++ słowo kluczowe, które oznacza linię końcową. Przesuwa kursor myszy do następnej linii.
- Koniec treści konstruktora klasy.
- Utwórz destruktor dla klasy.
- Tekst do wydrukowania na konsoli po wywołaniu destruktora. Koniec jest a C++ słowo kluczowe, które oznacza linię końcową. Przesuwa kursor myszy do następnej linii.
- Koniec ciała destruktora.
- Koniec treści zajęć.
- Wywołaj funkcję main(). Logikę programu należy dodać w treści tej funkcji.
- Utwórz obiekt klasy i nadaj mu nazwę a. Konstruktor zostanie wywołany.
- Utwórz zmienną całkowitą o nazwie p i przypisz jej wartość 1.
- Utwórz blok instrukcji if, używając zmiennej p.
- Utwórz obiekt klasy i nadaj mu nazwę b. Destruktor zostanie wywołany.
- Koniec treści instrukcji if.
- Koniec treści funkcji main().
Podsumowanie
- C++ jest zorientowany obiektowo.
- Klasy stanowią główne cechy C++ co sprawia, że jest zorientowany obiektowo.
- A C++ klasa łączy dane i metody manipulowania danymi w jedno.
- Klasa jest planem obiektu.
- Klasy określają formę obiektu.
- Dane i metody zawarte w klasie nazywane są członkami klasy.
- Aby uzyskać dostęp do członków klasy, należy użyć instancji klasy.
- Aby utworzyć klasę, używamy słowa kluczowego class.
- Funkcje składowe klasy można definiować wewnątrz lub na zewnątrz klasy.