C ++ konstruktorid: konstruktorite tüübid ja koopiad

Selles õpetuses õpime abinäidete abil C ++ konstruktorit ja selle tüüpi.

Konstruktor on spetsiaalne liikmefunktsiooni tüüp, mida kutsutakse objekti loomisel automaatselt.

Rakenduses C ++ on konstruktoril sama nimi kui klassil ja tal pole tagastustüüpi. Näiteks,

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

Siin on funktsioon Wall()klassi konstruktor Wall. Pange tähele, et konstruktor

  • on klassiga sama nimi,
  • tal pole tagastustüüpi ja
  • on public

C ++ vaikekonstruktor

Parameetriteta konstruktorit tuntakse vaikekonstruktorina . Ülaltoodud näites Wall()on vaikekonstruktor.

Näide 1: C ++ vaikekonstruktor

 // 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äljund:

 Seina pikkuse loomine = 5,5

Siin Wall()nimetatakse objekti wall1 loomisel konstruktorit. See määrab objekti pikkuse muutuja väärtuseks 5.5.

Märkus. Kui me pole oma klassis konstruktorit määratlenud, loob C ++ kompilaator automaatselt vaikekonstruktori, millel on tühi kood ja parameetrid puuduvad.

C ++ parameetriga konstruktor

C ++ - s on parameetritega konstruktor tuntud kui parameetriga konstruktor. See on eelistatud meetod liikmete andmete initsialiseerimiseks.

Näide 2: C ++ parameetriga 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äljund:

 Müüri 1 pindala: 90,3 Müüri 2 pindala: 53,55

Siin oleme loonud parameetriga konstruktori, Wall()millel on 2 parameetrit: double lenja double hgt. Nendes parameetrites sisalduvaid väärtusi kasutatakse liikumismuutujate pikkuse ja kõrguse initsialiseerimiseks.

Kui loome Roomklassi objekti , edastame argumentidena liikme muutujate väärtused. Selle kood on:

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

Nii initsialiseeritud liikmemuutujate abil saame nüüd funktsiooniga arvutada seina pindala calculateArea().

C ++ koopiaehitaja

C ++ keeles asuvat koopiakonstruktorit kasutatakse ühe objekti andmete kopeerimiseks teise.

Näide 3: C ++ koopiaehitaja

 #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äljund

 Ruumi 1 pindala: 90,3 Ruumi 2 pindala: 90,3

Selles programmis oleme Wallklassi koopia ühe teise sisu kopeerimiseks kasutanud koopiakonstruktorit. Koopia koostaja kood on:

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

Pange tähele, et selle konstruktori parameetril on Wallklassi objekti aadress .

Seejärel määrame esimese objekti muutujate väärtused teise objekti vastavatele muutujatele. Nii kopeeritakse objekti sisu.

In main()me siis luua kahe objekti wall1 ja wall2 ja seejärel kopeerige sisu esimene objekt teise koodiga

 Wall wall2 = wall1;

Märkus . Konstruktorit kasutatakse peamiselt objektide initsialiseerimiseks. Neid kasutatakse ka objekti loomisel vaikekoodi käivitamiseks.

Huvitavad Artiklid...