Konstruktory C ++: Typy a konstruktory kopírování

V tomto kurzu se na příkladech nápovědy dozvíme o konstruktoru C ++ a jeho typu.

Konstruktor je speciální typ členské funkce, která se volá automaticky při vytvoření objektu.

V jazyce C ++ má konstruktor stejný název jako třída a nemá návratový typ. Například,

 class Wall ( public: // create a constructor Wall() ( // code ) );

Zde je funkce Wall()konstruktorem třídy Wall. Všimněte si, že konstruktor

  • má stejný název jako třída,
  • nemá návratový typ a
  • je public

Výchozí konstruktor C ++

Konstruktor bez parametrů je známý jako výchozí konstruktor . Ve výše uvedeném příkladu Wall()je výchozí konstruktor.

Příklad 1: Výchozí konstruktor C ++

 // C++ program to demonstrate the use of default constructor #include using namespace std; // declare a class class Wall ( private: double length; public: // create a constructor Wall() ( // initialize private variables length = 5.5; cout << "Creating a wall." << endl; cout << "Length = " << length << endl; ) ); int main() ( // create an object Wall wall1; return 0; )

Výstup:

 Vytvoření délky stěny = 5,5

Tady, když je vytvořen objekt wall1, Wall()je volán konstruktor. Tím se nastaví proměnná délky objektu na 5.5.

Poznámka: Pokud jsme v naší třídě nedefinovali konstruktor, kompilátor C ++ automaticky vytvoří výchozí konstruktor s prázdným kódem a bez parametrů.

C ++ parametrizovaný konstruktor

V C ++ je konstruktor s parametry známý jako parametrizovaný konstruktor. Toto je upřednostňovaná metoda pro inicializaci dat členů.

Příklad 2: C ++ parametrizovaný konstruktor

 // C++ program to calculate the area of a wall #include using namespace std; // declare a class class Wall ( private: double length; double height; public: // create parameterized constructor Wall(double len, double hgt) ( // initialize private variables length = len; height = hgt; ) double calculateArea() ( return length * height; ) ); int main() ( // create object and initialize data members Wall wall1(10.5, 8.6); Wall wall2(8.5, 6.3); cout << "Area of Wall 1: " << wall1.calculateArea() << endl; cout << "Area of Wall 2: " << wall2.calculateArea() << endl; return 0; )

Výstup:

 Plocha stěny 1: 90,3 Plocha stěny 2: 53,55

Zde jsme vytvořili parametrizovaný konstruktor, Wall()který má 2 parametry: double lena double hgt. Hodnoty obsažené v těchto parametrech se používají k inicializaci délky a výšky členských proměnných.

Když vytvoříme objekt Roomtřídy, předáme hodnoty pro členské proměnné jako argumenty. Kód pro toto je:

 Wall wall1(10.5, 8.6); Wall wall2(8.5, 6.3);

S takto inicializovanými proměnnými členů nyní můžeme vypočítat plochu stěny pomocí calculateArea()funkce.

Konstruktor kopírování C ++

Konstruktor kopírování v C ++ se používá ke kopírování dat jednoho objektu do druhého.

Příklad 3: C ++ Copy Constructor

 #include using namespace std; // declare a class class Wall ( private: double length; double height; public: // parameterized constructor Wall(double len, double hgt) ( // initialize private variables length = len; height = hgt; ) // copy constructor with a Wall object as parameter Wall(Wall &obj) ( // initialize private variables length = obj.length; height = obj.height; ) double calculateArea() ( return length * height; ) ); int main() ( // create an object of Wall class Wall wall1(10.5, 8.6); // print area of wall1 cout << "Area of Room 1: " << wall1.calculateArea() << endl; // copy contents of room1 to another object room2 Wall wall2 = wall1; // print area of wall2 cout << "Area of Room 2: " << wall2.calculateArea() << endl; return 0; )

Výstup

 Plocha místnosti 1: 90,3 Plocha místnosti 2: 90,3

V tomto programu jsme použili kopírovací konstruktor ke zkopírování obsahu jednoho objektu Walltřídy do jiného. Kód konstruktoru kopie je:

 Room(Room &obj) ( length = obj.length; height = obj.height; )

Všimněte si, že parametr tohoto konstruktoru má adresu objektu Walltřídy.

Poté přiřadíme hodnoty proměnných prvního objektu k odpovídajícím proměnným druhého objektu. Takto se zkopíruje obsah objektu.

V main(), potom vytvoříme dva objekty wall1 a wall2 a poté zkopírujeme obsah prvního objektu do druhého s kódem

 Wall wall2 = wall1;

Poznámka : Konstruktor se primárně používá k inicializaci objektů. Používají se také ke spuštění výchozího kódu při vytvoření objektu.

Zajímavé články...