logo

C++ třídy a objekty

Třída v C++ je stavebním kamenem, který vede k objektově orientovanému programování. Je to uživatelsky definovaný datový typ, který obsahuje své vlastní datové členy a členské funkce, ke kterým lze přistupovat a používat je vytvořením instance dané třídy. Třída C++ je jako plán pro objekt. Například: Zvažte třídu Auta . Může existovat mnoho vozů s různými jmény a značkami, ale všechna budou sdílet některé společné vlastnosti, jako budou mít všechny 4 kola , Rychlostní omezení , najeté kilometry, atd. Tady je tedy auto třída a kola, rychlostní limity a počet najetých kilometrů jsou jejich vlastnosti.

  • Třída je uživatelsky definovaný datový typ, který má datové členy a členské funkce.
  • Datové členy jsou datové proměnné a členské funkce jsou funkce používané ke společné manipulaci s těmito proměnnými. Tyto datové členy a členské funkce definují vlastnosti a chování objektů ve třídě.
  • Ve výše uvedeném příkladu tř Auto , datovým členem bude rychlostní omezení , najeté kilometry, atd. a členské funkce mohou být použití brzd , zvýšení rychlosti, atd.

An Objekt je instancí třídy. Když je definována třída, není alokována žádná paměť, ale když je vytvořena instance (tj. je vytvořen objekt), paměť je alokována.



Definování třídy a deklarace objektů

Třída je definována v C++ pomocí klíčového slova class následovaného názvem třídy. Tělo třídy je definováno uvnitř složených závorek a ukončeno středníkem na konci.

Třída a objekt C++

Deklarace objektů

Když je definována třída, je definována pouze specifikace pro objekt; není přidělena žádná paměť ani úložiště. Chcete-li používat funkce dat a přístupu definované ve třídě, musíte vytvořit objekty.



Syntax

ClassName ObjectName;>

Přístup k datovým členům a členským funkcím : K datovým členům a členským funkcím třídy lze přistupovat pomocí operátoru tečka(‘.’) s objektem. Pokud je například název objektu obj a chcete získat přístup k členské funkci se jménem printName() pak budeš muset napsat obj.printName() .

Přístup k datovým členům

Veřejné datové členy jsou také přístupné stejným způsobem, avšak k soukromým datovým členům není povolen přímý přístup objektu. Přístup k datovému členu závisí výhradně na řízení přístupu tohoto datového člena. Toto řízení přístupu je dáno modifikátory Access v C++. Existují tři modifikátory přístupu: veřejné, soukromé a chráněné .

C++




formátovač řetězců



// 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;> }>

>

>

Výstup

Geekname is:Abhi>

Členské funkce ve třídách

Členskou funkci lze definovat 2 způsoby:

  • Definice vnitřní třídy
  • Definice mimo třídu

Chcete-li definovat členskou funkci mimo definici třídy, musíme použít rozlišení rozsahu:: operátor spolu s názvem třídy a názvem funkce.

C++




// 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; }>

>

>

Výstup

Geekname is: xyz Geek id is: 15>

Všimněte si, že všechny členské funkce definované v definici třídy jsou standardně v souladu , ale můžete také vložit jakoukoli netřídní funkci pomocí klíčového slova inline s nimi. Inline funkce jsou skutečné funkce, které se během kompilace všude kopírují, jako je pre-procesorové makro, takže režie volání funkcí je snížena.

Poznámka: Prohlášení a funkce přítele je způsob, jak poskytnout soukromý přístup k nečlenské funkci.

seznam v Javě

Konstruktéři

Konstruktéři jsou speciální členy třídy, které jsou volány kompilátorem pokaždé, když je vytvořen objekt této třídy. Konstruktory mají stejný název jako třída a mohou být definovány uvnitř nebo vně definice třídy. Existují 3 typy konstruktorů:

C++




java řetězec do json
// 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; }>

>

>

Výstup

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

A Kopírovat konstruktor vytvoří nový objekt, který je přesnou kopií stávajícího objektu. Kompilátor poskytuje výchozí konstruktor kopírování všem třídám.

Syntax:

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

ničitelé

ničitel je další speciální členská funkce, která je volána kompilátorem, když končí rozsah objektu.

C++




nahrazení řetězce v jazyce Java

// 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>

>

>

Výstup

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>

Zajímavý fakt (vzácně známý koncept)

Proč dáváme na konci hodiny středníky?

Mnoho lidí by mohlo říci, že je to základní syntaxe a na konci třídy bychom měli dát středník, jak to definuje její pravidlo v cpp. Ale hlavním důvodem, proč jsou středníky na konci třídy, je kontrola kompilátoru, zda se uživatel nepokouší vytvořit instanci třídy na jejím konci.

Ano, stejně jako struktura a sjednocení, můžeme také vytvořit instanci třídy na konci těsně před středníkem. Výsledkem je, že jakmile spuštění dosáhne tohoto řádku, vytvoří třídu a přidělí paměť vaší instanci.

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;> }>

>

>

Výstup

Default Constructor>

Vidíme, že jsme vytvořili instanci třídy Demo s názvem instance, v důsledku toho se zavolá výstup, který vidíme, je Výchozí konstruktor.

Podobně můžeme také volat parametrizovaný konstruktor pouhým předáním hodnot zde

C++

převod data na řetězec




#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;> }>

>

>

Výstup

parameterized Constructor values-100 200>

Takže vytvořením instance těsně před středníkem můžeme vytvořit Instance of class.

Související články:

  • Vícenásobná dědičnost v C++
  • Čistý virtuální ničitel
  • C++ kvíz