C ++ konstruktoriai: konstruktorių tipai ir kopijos

Šioje pamokoje sužinosime apie C ++ konstruktorių ir jo tipą su pagalbos pavyzdžiais.

Konstruktorius yra specialus nario funkcijos tipas, kuris automatiškai iškviečiamas, kai sukuriamas objektas.

C ++ versijoje konstruktorius turi tą patį pavadinimą, kaip ir klasė, ir neturi grąžinimo tipo. Pavyzdžiui,

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

Čia funkcija Wall()yra klasės konstruktorius Wall. Atkreipkite dėmesį, kad konstruktorius

  • turi tą patį pavadinimą kaip klasė,
  • neturi grąžinimo tipo ir
  • yra public

C ++ numatytasis konstruktorius

Konstruktorius be parametrų yra žinomas kaip numatytasis konstruktorius . Ankstesniame pavyzdyje Wall()yra numatytasis konstruktorius.

1 pavyzdys: C ++ numatytasis konstruktorius

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

Išvestis:

 Sienos ilgio sukūrimas = 5,5

Čia, kai sukuriamas „wall1“ objektas, Wall()iškviečiamas konstruktorius. Tai nustato objekto ilgio kintamąjį į 5.5.

Pastaba: Jei savo klasėje neapibrėžėme konstruktoriaus, tada C ++ kompiliatorius automatiškai sukurs numatytąjį konstruktorių su tuščiu kodu ir be parametrų.

C ++ parametruojamas konstruktorius

C ++ versijoje konstruktorius su parametrais yra žinomas kaip parametruojamas konstruktorius. Tai yra pageidaujamas būdas inicijuoti narių duomenis.

2 pavyzdys: C ++ parametruojamas konstruktorius

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

Išvestis:

 1 sienos plotas: 90,3 2 sienos plotas: 53,55

Čia mes sukūrėme parametrizuotą konstruktorių, Wall()kuris turi 2 parametrus: double lenir double hgt. Šiuose parametruose esančios reikšmės naudojamos inicijuojant narių kintamuosius ilgį ir aukštį.

Kurdami klasės objektą, Roomnario kintamųjų reikšmes perduodame kaip argumentus. Tai yra kodas:

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

Taip inicializavus narių kintamuosius, dabar galime apskaičiuoti sienos plotą su calculateArea()funkcija.

C ++ kopijavimo konstruktorius

C ++ kopijavimo konstruktorius naudojamas vieno objekto duomenims nukopijuoti į kitą.

3 pavyzdys: „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; )

Rezultatas

 1 kambario plotas: 90.3 2 kambario plotas: 90.3

Šioje programoje kopijavimo konstruktorių naudojome vieno Wallklasės objekto turiniui nukopijuoti į kitą. Kopijos kūrėjo kodas yra:

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

Atkreipkite dėmesį, kad šio konstruktoriaus parametras turi Wallklasės objekto adresą .

Tada pirmojo objekto kintamųjų reikšmes priskiriame atitinkamiems antrojo objekto kintamiesiems. Taip nukopijuojamas objekto turinys.

Be main(), mes tada sukurti du objektus wall1 ir wall2 ir tada nukopijuokite pirmojo objekto turinį į sekundę su kodu

 Wall wall2 = wall1;

Pastaba : konstruktorius pirmiausia naudojamas objektams inicializuoti. Jie taip pat naudojami numatytam kodui paleisti, kai sukuriamas objektas.

Įdomios straipsniai...