logo

Klasy i obiekty C++

Klasa w C++ jest elementem konstrukcyjnym prowadzącym do programowania obiektowego. 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 C++ jest jak plan obiektu. Na przykład: rozważ klasę Samochody . Może być wiele samochodów o różnych nazwach i markach, ale wszystkie będą miały pewne wspólne cechy, takie jak wszystkie 4 koła , Ograniczenie prędkości , Przebieg, itd. Zatem tutaj Samochód to klasa, a koła, ograniczenia prędkości i przebieg to ich właściwości.

  • Klasa to typ danych zdefiniowany przez użytkownika, który zawiera elementy danych i funkcje składowe.
  • Elementy 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 class Samochód , członkiem danych będzie ograniczenie prędkości , przebieg, itp., a funkcje członkowskie mogą być zaciągnięcie hamulców , zwiększenie prędkości, itp.

Jakiś Obiekt jest instancją klasy. Kiedy klasa jest zdefiniowana, nie jest przydzielana żadna pamięć, ale podczas jej tworzenia (tj. tworzenia obiektu) pamięć jest przydzielana.



Definiowanie klas i deklarowanie obiektów

Klasę definiuje się w C++ za pomocą słowa kluczowego class, po którym następuje nazwa klasy. Ciało klasy jest zdefiniowane w nawiasach klamrowych i zakończone średnikiem.

Klasa i obiekt C++

Deklarowanie obiektów

Kiedy zdefiniowana jest klasa, zdefiniowana jest tylko specyfikacja obiektu; nie jest przydzielana żadna pamięć ani magazyn. Aby móc korzystać ze zdefiniowanych w klasie funkcji danych i dostępu, należy utworzyć obiekty.



Składnia

ClassName ObjectName;>

Dostęp do elementów danych i funkcji elementów : Dostęp do elementów danych i funkcji składowych klasy można uzyskać za pomocą operatora kropki („.”) z obiektem. Na przykład, jeśli nazwa obiektu to obj i chcesz uzyskać dostęp do funkcji członkowskiej o nazwie Nazwa wydruku() wtedy będziesz musiał napisać obj.printName() .

Dostęp do członków danych

Dostęp do publicznych elementów danych jest również możliwy w ten sam sposób, jednak obiekt nie może bezpośrednio uzyskiwać dostępu do prywatnych elementów danych. Dostęp do członka danych zależy wyłącznie od kontroli dostępu tego członka danych. Ta kontrola dostępu jest zapewniana przez modyfikatory dostępu w C++. Istnieją trzy modyfikatory dostępu: publiczne, prywatne i chronione .

C++




ulepszona pętla Java



// C++ program to demonstrate accessing of data members> #include> using> namespace> std;> class> Geeks {> >// Access specifier> public>:> >// Data Members> >string geekname;> >// Member Functions()> >void> printname() { cout <<>'Geekname is:'> << geekname; }> };> int> main()> {> >// Declare an object of class geeks> >Geeks obj1;> >// accessing data member> >obj1.geekname =>'Abhi'>;> >// accessing member function> >obj1.printname();> >return> 0;> }>

>

>

Wyjście

Geekname is:Abhi>

Funkcje członkowskie w klasach

Istnieją dwa sposoby definiowania funkcji składowej:

  • Wewnątrz definicji klasy
  • Definicja klasy zewnętrznej

Aby zdefiniować funkcję składową poza definicją klasy, musimy użyć metody rozdzielczość zakresu:: operator wraz z nazwą klasy i nazwą funkcji.

C++

aktor filmowy Vijay




// C++ program to demonstrate function> // declaration outside class> > #include> using> namespace> std;> class> Geeks> {> >public>:> >string geekname;> >int> id;> > >// printname is not defined inside class definition> >void> printname();> > >// printid is defined inside class definition> >void> printid()> >{> >cout <<>'Geek id is: '>< } }; // Definition of printname using scope resolution operator :: void Geeks::printname() { cout <<'Geekname is: '< } int main() { Geeks obj1; obj1.geekname = 'xyz'; obj1.id=15; // call printname() obj1.printname(); cout << endl; // call printid() obj1.printid(); return 0; }>

>

>

Wyjście

Geekname is: xyz Geek id is: 15>

Należy pamiętać, że wszystkie funkcje składowe zdefiniowane w definicji klasy są domyślnie wbudowane , ale możesz także umieścić w linii dowolną funkcję nieklasową, używając słowa kluczowego inline. Funkcje inline to rzeczywiste funkcje, które są kopiowane wszędzie podczas kompilacji, jak makro preprocesora, więc zmniejsza się narzut związany z wywołaniami funkcji.

Notatka: Oświadczenie A funkcja przyjaciela to sposób na zapewnienie prywatnego dostępu do funkcji niebędącej członkiem.

Konstruktorzy

Konstruktorzy są specjalnymi członkami klasy, wywoływanymi przez kompilator za każdym razem, gdy tworzona jest instancja obiektu tej klasy. Konstruktory mają taką samą nazwę jak klasa i mogą być zdefiniowane wewnątrz lub na zewnątrz definicji klasy. Istnieją 3 typy konstruktorów:

C++

usuń pierwszy znak Excel




// C++ program to demonstrate constructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Default Constructor> >Geeks()> >{> >cout <<>'Default Constructor called'> << endl;> >id=-1;> >}> > >//Parameterized Constructor> >Geeks(>int> x)> >{> >cout <<>'Parameterized Constructor called '><< endl;> >id=x;> >}> };> int> main() {> > >// obj1 will call Default Constructor> >Geeks obj1;> >cout <<>'Geek id is: '>< // obj2 will call Parameterized Constructor Geeks obj2(21); cout <<'Geek id is: ' < return 0; }>

>

>

Wyjście

Default Constructor called Geek id is: -1 Parameterized Constructor called Geek id is: 21>

A Kopiuj konstruktor tworzy nowy obiekt będący dokładną kopią istniejącego obiektu. Kompilator udostępnia domyślny konstruktor kopiujący dla wszystkich klas.

Składnia:

class-name (class-name &){}>

niszczyciele

Niszczyciel to kolejna specjalna funkcja składowa wywoływana przez kompilator, gdy kończy się zakres obiektu.

C++




// C++ program to explain destructors> #include> using> namespace> std;> class> Geeks> {> >public>:> >int> id;> > >//Definition for Destructor> >~Geeks()> >{> >cout <<>'Destructor called for id: '> << id < } }; int main() { Geeks obj1; obj1.id=7; int i = 0; while ( i <5 ) { Geeks obj2; obj2.id=i; i++; } // Scope for obj2 ends here return 0; } // Scope for obj1 ends here>

>

ciąg znaków na znak w Javie
>

Wyjście

Destructor called for id: 0 Destructor called for id: 1 Destructor called for id: 2 Destructor called for id: 3 Destructor called for id: 4 Destructor called for id: 7>

Ciekawostka (rzadko znana koncepcja)

Dlaczego na końcu zajęć stawiamy średniki?

Wiele osób może powiedzieć, że jest to podstawowa składnia i powinniśmy postawić średnik na końcu klasy, jak definiuje to reguła w cpp. Jednak głównym powodem, dla którego na końcu klasy znajdują się średniki, jest sprawdzenie przez kompilator, czy użytkownik próbuje utworzyć instancję klasy na jej końcu.

Tak, podobnie jak w przypadku struktury i unii, możemy również utworzyć instancję klasy na końcu tuż przed średnikiem. W rezultacie, gdy wykonanie osiągnie tę linię, tworzy klasę i przydziela pamięć Twojej instancji.

C++




#include> using> namespace> std;> > class> Demo{> >int> a, b;> >public>:> >Demo()>// default constructor> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)>//parameterised constructor> >{> >cout <<>'parameterized constructor -values'> << a <<>' '><< b << endl;> >}> > }instance;> > > int> main() {> > >return> 0;> }>

>

>

Wyjście

Default Constructor>

Widzimy, że utworzyliśmy instancję klasy Demo o nazwie instancja, w wyniku czego wywołany zostanie konstruktor domyślny.

Podobnie możemy wywołać sparametryzowany konstruktor, po prostu przekazując tutaj wartości

C++




#include> using> namespace> std;> > class> Demo{> >public>:> >int> a, b;> >Demo()> >{> >cout <<>'Default Constructor'> << endl;> >}> >Demo(>int> a,>int> b):a(a),b(b)> >{> >cout <<>'parameterized Constructor values-'> << a <<>' '><< b << endl;> >}> > > > }instance(100,200);> > > int> main() {> > >return> 0;> }>

>

>

jak usunąć kolumnę w postgresql
Wyjście

parameterized Constructor values-100 200>

Zatem tworząc instancję tuż przed średnikiem, możemy stworzyć instancję klasy.

Powiązane artykuły:

  • Dziedziczenie wielokrotne w C++
  • Czysty wirtualny niszczyciel
  • Quiz C++