Š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 len
ir double hgt
. Šiuose parametruose esančios reikšmės naudojamos inicijuojant narių kintamuosius ilgį ir aukštį.
Kurdami klasės objektą, Room
nario 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 Wall
klasė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 Wall
klasė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.