C++ Klasa i obiekt z przykładem

⚡ Inteligentne podsumowanie

Klasy i obiekty w C++ stanowią podstawę programowania obiektowego, w którym klasa definiuje plan danych i funkcji członkowskich, a obiekt jest konkretnym wystąpieniem utworzonym na podstawie tego planu.

  • 🔷 Plan zajęć: A C++ Klasa ta łączy elementy danych i funkcje członkowskie w jeden typ zdefiniowany przez użytkownika.
  • 🔑 Modyfikatory dostępu: Słowa kluczowe private, public i protected kontrolują, gdzie można uzyskać dostęp do członków klasy.
  • 🧱 Instancjacja obiektu: Obiekt tworzy się z klasy przy użyciu składni nazwa-klasy nazwa-obiektu.
  • ???? Dostęp dla członków: Operator kropki umożliwia dostęp do elementów publicznych, podczas gdy funkcje członkowskie manipulują przechowywanymi danymi.
  • ⚙️ Konstruktorzy: Konstruktory inicjują obiekty automatycznie, a destruktory zwalniają je, gdy wyjdą poza zakres.
  • 🤖 Pomoc AI: GitHub Copilot i podobne narzędzia wspomagające sztuczną inteligencję tworzą szkielety definicji klas i konstruktorów na podstawie krótkiego komentarza.

C++ Klasa i przedmiot

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 położenie i rozmiary drzwi, okien, podłóg itp. Na podstawie tych opisów możemy zbudować dom. Dom staje się obiektem. Z prototypu można stworzyć wiele domów. Można również utworzyć wiele obiektów z klasy.

C++ klasa jako plan obiektów

Na powyższym rysunku mamy prototyp pojedynczego domu. Na podstawie tego prototypu stworzyliśmy dwa domy o różnych funkcjach.

Mając na myśli klasę jako plan, następnym krokiem jest przyjrzenie się, w jaki sposób jest ona deklarowana w kodzie.

Deklaracja klasy

In C++Klasa jest definiowana za pomocą słowa kluczowego „class”. Po nim powinna następować nazwa klasy. Następnie treść klasy jest dodawana w nawiasach klamrowych { }.

Składnia

class class-name
   {
   // data
   // functions
   };
  • Nazwa klasy jest nazwą, która ma zostać przypisana klasie.
  • dane są danymi dla klasy, zwykle deklarowanymi jako zmienne.
  • Funkcje są funkcjami klasy.

Deklarując nazwę klasy i jej treść naturalnie pojawia się pytanie, kto może używać poszczególnych jej elementów.

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.

Po utworzeniu klasy można na jej podstawie tworzyć obiekty, podobnie jak tworzy się zmienne na podstawie typu danych.

Definicja obiektu

Obiekty są tworzone z klas. Obiekty klas deklaruje się w podobny sposób jak zmienne. Najpierw należy podać nazwę klasy, a następnie nazwę obiektu. Obiekt jest typu klasowego.

Składnia

class-name object-name;
  • Nazwa klasy jest nazwą klasy, z której obiekt ma zostać utworzony.
  • Nazwa obiektu jest nazwą, która ma zostać przypisana nowemu obiektowi.

Ten proces tworzenia obiektu z klasy nazywany jest tworzeniem instancji.

Po utworzeniu obiektu można uzyskać bezpośredni dostęp do jego elementów publicznych za pomocą prostego operatora.

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:

C++ uzyskiwanie dostępu do publicznych członków danych Przykład 1 wyjście

Oto zrzut ekranu kodu:

C++ dostęp do publicznych członków danych Przykład 1 kod

Code Wyjaśnienie:

  1. Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
  2. Dołączenie przestrzeni nazw std do naszego kodu, aby móc używać jej klas bez wywoływania jej.
  3. Zadeklaruj klasę o nazwie Phone.
  4. Użyj modyfikatora dostępu publicznego, aby oznaczyć zmienne, które mamy zamiar utworzyć, jako publicznie dostępne.
  5. Zadeklaruj koszt zmienny typu danych double.
  6. Zadeklaruj zmienną całkowitą o nazwie slots.
  7. Koniec treści zajęć.
  8. Wywołanie funkcji main(). Logikę programu należy dodać w jego treści.
  9. Utwórz obiekt o nazwie Y6 typu Telefon. Nazywa się to instancją.
  10. Utwórz obiekt o nazwie Y7 typu Telefon. Nazywa się to instancją.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. Wydrukuj koszt Y6 na konsoli wraz z innym tekstem.
  16. Wydrukuj koszt Y7 na konsoli wraz z innym tekstem.
  17. Wydrukuj liczbę miejsc dla Y6 wraz z innym tekstem.
  18. Wydrukuj liczbę miejsc dla Y7 wraz z innym tekstem.
  19. Program musi zwrócić wartość po pomyślnym zakończeniu.
  20. Koniec treści funkcji main().

Użytkownicy publiczni są otwarci na kod zewnętrzny, natomiast użytkownicy prywatni podlegają znacznie bardziej rygorystycznym zasadom dostępu.

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.

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:

C++ prywatny członek klasy Przykład 2 wyjście

Oto zrzut ekranu kodu:

C++ prywatny członek klasy Przykład 2 kod

Code Wyjaśnienie:

  1. Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
  2. Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
  3. Utwórz klasę o nazwie ClassA.
  4. Użyj modyfikatora dostępu publicznego, aby oznaczyć członka klasy, który ma zostać utworzony, jako publicznie dostępny.
  5. Utwórz funkcję o nazwie set_a(), która przyjmuje jedną wartość całkowitą val.
  6. Utwórz funkcję o nazwie get_a().
  7. Użyj modyfikatora dostępu prywatnego, aby oznaczyć członka klasy, który ma zostać utworzony, jako dostępny prywatnie.
  8. Zadeklaruj zmienną całkowitą o nazwie a.
  9. Koniec treści zajęć.
  10. 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.
  11. Funkcja get_a() powinna po wywołaniu zwrócić wartość zmiennej a.
  12. Koniec definicji funkcji get_a().
  13. 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.
  14. Przypisanie wartości zmiennej val zmiennej a.
  15. Koniec definicji funkcji set_a().
  16. Wywołaj funkcję main(). Logikę programu należy dodać w treści tej funkcji.
  17. Utwórz instancję klasy A i nadaj jej nazwę a.
  18. Użyj powyższej instancji klasy i funkcji set_a(), aby przypisać wartość 20 do zmiennej a.
  19. Drukowanie tekstu obok wartości zmiennej a na konsoli. Wartość zmiennej a uzyskujemy wywołując funkcję get_a().
  20. Program musi zwrócić wartość po pomyślnym zakończeniu.
  21. Koniec treści funkcji main().

Członkowie chronieni znajdują się pomiędzy członkami prywatnymi i publicznymi, co dodaje jedną kluczową możliwość dziedziczenia.

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.

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:

C++ chroniony członek klasy Przykład 3 wyjście

Oto zrzut ekranu kodu:

C++ przykład 3 kodu dziedziczenia klasy chronionej

Code Wyjaśnienie:

  1. Dołącz plik nagłówkowy iostream do naszego kodu, aby móc korzystać z jego funkcji.
  2. Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
  3. Utwórz klasę o nazwie ParentClass.
  4. Użyj chronionego modyfikatora dostępu, aby oznaczyć element klasy, który ma zostać utworzony, jako chroniony.
  5. Utwórz zmienną całkowitą o nazwie wartość.
  6. Koniec treści zajęć.
  7. Utwórz nową klasę o nazwie ChildClass, która dziedziczy klasę ParentClass.
  8. Użyj chronionego modyfikatora dostępu, aby oznaczyć członka klasy, który ma zostać utworzony, jako dostępny dla klas podrzędnych.
  9. Utwórz funkcję o nazwie setId(), która przyjmuje jedną wartość całkowitą x.
  10. Przypisanie wartości zmiennej x do wartości zmiennej.
  11. Koniec definicji funkcji setId().
  12. Utwórz funkcję o nazwie displayValue().
  13. Wydrukuj wartość zmiennej o nazwie wartość na konsoli wraz z innym tekstem.
  14. Koniec treści funkcji displayValue().
  15. Koniec treści klasy o nazwie ChildClass.
  16. Wywołaj funkcję main(). Logikę programu należy dodać w treści tej funkcji.
  17. Utwórz instancję ChildClass i nadaj jej nazwę c.
  18. Użyj powyższej instancji klasy i funkcji setId(), aby przypisać wartość 21 do zmiennej x.
  19. Użyj powyższej instancji klasy, aby wywołać funkcję o nazwie displayValue().
  20. Program musi zwrócić wartość po pomyślnym zakończeniu.
  21. Koniec treści funkcji main().

Oprócz przechowywania danych klasa grupuje również funkcje, które operują na tych danych.

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.

4 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:

C++ funkcje członkowskie klasy Przykład 4 wyjście

Oto zrzut ekranu kodu:

C++ funkcje członkowskie klasy Przykład 4 kod

Code Wyjaśnienie:

  1. Dołącz plik nagłówkowy iostream do naszego programu, aby móc korzystać z jego funkcji.
  2. Dołącz plik nagłówkowy ciągu znaków do naszego programu, aby móc korzystać z jego funkcji.
  3. Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
  4. Utwórz klasę o nazwie Guru99.
  5. Użyj modyfikatora public access, aby oznaczyć elementy klasy, które zamierzasz utworzyć, jako publicznie dostępne.
  6. Utwórz zmienną łańcuchową o nazwie nazwa_samouczka.
  7. Utwórz zmienną całkowitą o nazwie id.
  8. Utwórz funkcję o nazwie printname(). Ta funkcja nie jest zdefiniowana w definicji klasy.
  9. Utwórz funkcję o nazwie printid(). Ta funkcja jest zdefiniowana w definicji klasy. Jej treść została dodana w definicji klasy.
  10. 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().
  11. Koniec treści funkcji printid().
  12. Koniec ciała klasy Guru99.
  13. Początek definicji funkcji printname().
  14. 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().
  15. Koniec definicji funkcji printname().
  16. Wywołaj funkcję main(). Logikę programu należy dodać w treści tej funkcji.
  17. Utwórz instancję klasy Guru99 i nadając mu nazwę guru99.
  18. Użyj powyższej instancji, aby przypisać wartość C++ do zmiennej nazwa_samouczka.
  19. Użyj instancji guru99, aby przypisać wartość 1001 do zmiennej id.
  20. Użyj instancji guru99, aby wywołać funkcję printname() .
  21. Wywołaj polecenie end (end line), aby wydrukować nową pustą linię na konsoli.
  22. Użyj instancji guru99, aby wywołać funkcję printid().
  23. Program musi zwrócić wartość po pomyślnym zakończeniu.
  24. Koniec treści funkcji main().

Dwie specjalne funkcje członkowskie są uruchamiane automatycznie podczas tworzenia obiektu i podczas jego usuwania.

Konstruktory i destruktory

Kim jest Konstruktor?

Konstruktory to specjalne funkcje inicjujące obiekty. C++ kompilatory Wywołaj konstruktor podczas tworzenia obiektu. Konstruktory pomagają przypisywać wartości elementom klasy. Oczywiście dzieje się to po przydzieleniu im pewnej przestrzeni pamięci.

Czym jest destruktor?

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 (::).

5 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:

C++ konstruktor i destruktor Przykład 5 wyjście

Oto zrzut ekranu kodu:

C++ konstruktor i destruktor Przykład 5 kodu

Code Wyjaśnienie:

  1. Dołącz plik nagłówkowy iostream do kodu, aby móc korzystać z jego funkcji.
  2. Dołącz przestrzeń nazw std do naszego kodu, aby używać jej klas bez wywoływania jej.
  3. Utwórz klasę o nazwie ClassA.
  4. Użyj modyfikatora dostępu publicznego, aby oznaczyć członka, który mamy zamiar utworzyć, jako publicznie dostępny.
  5. Utwórz konstruktor dla klasy.
  6. 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.
  7. Koniec treści konstruktora klasy.
  8. Utwórz destruktor dla klasy.
  9. 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.
  10. Koniec ciała destruktora.
  11. Koniec treści zajęć.
  12. Wywołaj funkcję main(). Logikę programu należy dodać w treści tej funkcji.
  13. Utwórz obiekt klasy i nadaj mu nazwę a. Konstruktor zostanie wywołany.
  14. Utwórz zmienną całkowitą o nazwie p i przypisz jej wartość 1.
  15. Utwórz blok instrukcji if, używając zmiennej p.
  16. Utwórz obiekt klasy i nadaj mu nazwę b. Destruktor zostanie wywołany.
  17. Koniec treści instrukcji if.
  18. Koniec treści funkcji main().

FAQ

Klasa to zdefiniowany przez użytkownika schemat, który grupuje elementy danych i funkcje składowe w jeden typ. Obiekt to konkretna instancja zbudowana na podstawie tej klasy, przechowująca własną kopię danych opisanych przez schemat.

Główną różnicą jest domyślny dostęp: członkowie klasy są domyślnie prywatni, podczas gdy członkowie klasy są domyślnie prywatni. są domyślnie publiczne. Oba obsługują dziedziczenie, konstruktory i hermetyzację w C++.

C++ obsługuje trzy powszechnie spotykane typy konstruktorów: domyślny konstruktor bez argumentów, sparametryzowany konstruktor akceptujący wartości inicjujące elementy oraz konstruktor kopiujący tworzący nowy obiekt z istniejącego obiektu tej samej klasy.

Funkcja zaprzyjaźniona to funkcja niebędąca członkiem klasy, której przyznano dostęp do prywatnych i chronionych członków klasy. Jest deklarowana wewnątrz klasy za pomocą słowa kluczowego „friend”, ale definiowana poza nią jak zwykła funkcja.

Wskaźnik this to niejawny wskaźnik dostępny w każdej niestatycznej funkcji członkowskiej. Wskazuje on na obiekt, który wywołał funkcję, umożliwiając kodowi odwołanie się do własnych elementów tego obiektu i rozwiązanie konfliktów nazw między parametrami a elementami danych.

Hermetyzacja grupuje dane i funkcje, które na nich operują, w ramach jednej klasy, a następnie ukrywa szczegóły wewnętrzne za pomocą prywatnych składowych. Publiczne funkcje składowe udostępniają kontrolowany interfejs, chroniąc dane przed przypadkowym lub nieautoryzowanym dostępem.

Tak. Asystenci kodowania AI przekształcają krótki monit lub komentarz w definicje klasy roboczej, obejmujące elementy danych, specyfikatory dostępu, konstruktory i funkcje składowe. Zawsze sprawdzaj wygenerowane poziomy dostępu i logikę inicjalizacji przed kompilacją kodu.

Tak. Drugi pilot GitHub Sugeruje deklaracje klas, konstruktory, gettery i settery podczas pisania. Szybko radzi sobie z powtarzającymi się szablonami, choć przed kompilacją nadal należy zweryfikować dostęp do składowych, logikę konstruktora i użycie obiektów.

Podsumuj ten post następująco: