ב-C++, בנאי היא שיטה מיוחדת המופעלת אוטומטית בזמן יצירת האובייקט. הוא משמש לאתחל את חברי הנתונים של אובייקט חדש בדרך כלל. לבנאי ב-C++ יש את אותו שם כמו מחלקה או מבנה.
בקצרה, הליך מסוים שנקרא בנאי נקרא אוטומטית כאשר אובייקט נוצר ב-C++. באופן כללי, הוא משמש כדי ליצור את חברי הנתונים של דברים חדשים. ב-C++, שם המחלקה או המבנה משמשים גם כשם הבנאי. כאשר אובייקט הושלם, הקונסטרוקטור נקרא. מכיוון שהוא יוצר את הערכים או נותן נתונים עבור הדבר, הוא ידוע בתור בנאי.
שנה שהמחשב הומצא
אב הטיפוס של Constructors נראה כך:
(list-of-parameters);
התחביר הבא משמש להגדרת הבנאי של המחלקה:
(list-of-parameters) { // constructor definition }
התחביר הבא משמש להגדרת בנאי מחוץ למחלקה:
: : (list-of-parameters){ // constructor definition}
לבנאים חסר סוג החזרה מכיוון שאין להם ערך החזרה.
יכולים להיות שני סוגים של בנאים ב-C++.
- בנאי ברירת מחדל
- בנאי עם פרמטרים
C++ Constructor ברירת מחדל
בנאי שאין לו ארגומנט ידוע בתור בנאי ברירת מחדל. הוא מופעל בזמן יצירת האובייקט.
בואו נראה את הדוגמה הפשוטה של C++ Constructor ברירת המחדל.
#include using namespace std; class Employee { public: Employee() { cout<<'default constructor invoked'<<endl; } }; int main(void) { employee e1; creating an object of e2; return 0; < pre> <p> <strong>Output:</strong> </p> <pre>Default Constructor Invoked Default Constructor Invoked </pre> <h2>C++ Parameterized Constructor</h2> <p>A constructor which has parameters is called parameterized constructor. It is used to provide different values to distinct objects.</p> <p>Let's see the simple example of C++ Parameterized Constructor.</p> <pre> #include using namespace std; class Employee { public: int id;//data member (also instance variable) string name;//data member(also instance variable) float salary; Employee(int i, string n, float s) { id = i; name = n; salary = s; } void display() { cout< <id<<' '<<name<<' '<<salary<<endl; } }; int main(void) { employee e1="Employee(101," 'sonoo', 890000); creating an object of e2="Employee(102," 'nakul', 59000); e1.display(); e2.display(); return 0; < pre> <p> <strong>Output:</strong> </p> <pre>101 Sonoo 890000 102 Nakul 59000 </pre> <h2>What distinguishes constructors from a typical member function?</h2> <ol class="points"> <li>Constructor's name is the same as the class's</li> <li>Default There isn't an input argument for constructors. However, input arguments are available for copy and parameterized constructors.</li> <li>There is no return type for constructors.</li> <li>An object's constructor is invoked automatically upon creation.</li> <li>It must be shown in the classroom's open area.</li> <li>The C++ compiler creates a default constructor for the object if a constructor is not specified (expects any parameters and has an empty body).</li> </ol> <p>By using a practical example, let's learn about the various constructor types in C++. Imagine you visited a store to purchase a marker. What are your alternatives if you want to buy a marker? For the first one, you ask a store to give you a marker, given that you didn't specify the brand name or colour of the marker you wanted, simply asking for one amount to a request. So, when we just said, 'I just need a marker,' he would hand us whatever the most popular marker was in the market or his store. The default constructor is exactly what it sounds like! The second approach is to go into a store and specify that you want a red marker of the XYZ brand. He will give you that marker since you have brought up the subject. The parameters have been set in this instance thus. And a parameterized constructor is exactly what it sounds like! The third one requires you to visit a store and declare that you want a marker that looks like this (a physical marker on your hand). The shopkeeper will thus notice that marker. He will provide you with a new marker when you say all right. Therefore, make a copy of that marker. And that is what a copy constructor does!</p> <h2>What are the characteristics of a constructor?</h2> <ol class="points"> <li>The constructor has the same name as the class it belongs to.</li> <li>Although it is possible, constructors are typically declared in the class's public section. However, this is not a must.</li> <li>Because constructors don't return values, they lack a return type.</li> <li>When we create a class object, the constructor is immediately invoked.</li> <li>Overloaded constructors are possible.</li> <li>Declaring a constructor virtual is not permitted.</li> <li>One cannot inherit a constructor.</li> <li>Constructor addresses cannot be referenced to.</li> <li>When allocating memory, the constructor makes implicit calls to the new and delete operators.</li> </ol> <h2>What is a copy constructor?</h2> <p>A member function known as a copy constructor initializes an item using another object from the same class-an in-depth discussion on Copy Constructors.</p> <p>Every time we specify one or more non-default constructors (with parameters) for a class, we also need to include a default constructor (without parameters), as the compiler won't supply one in this circumstance. The best practice is to always declare a default constructor, even though it is not required.</p> <p>A reference to an object belonging to the same class is required by the copy constructor.</p> <pre> Sample(Sample &t) { id=t.id; } </pre> <h2>What is a destructor in C++?</h2> <p>An equivalent special member function to a constructor is a destructor. The constructor creates class objects, which are destroyed by the destructor. The word 'destructor,' followed by the tilde () symbol, is the same as the class name. You can only define one destructor at a time. One method of destroying an object made by a constructor is to use a destructor. Destructors cannot be overloaded as a result. Destructors don't take any arguments and don't give anything back. As soon as the item leaves the scope, it is immediately called. Destructors free up the memory used by the objects the constructor generated. Destructor reverses the process of creating things by destroying them.</p> <p>The language used to define the class's destructor</p> <pre> ~ () { } </pre> <p>The language used to define the class's destructor outside of it</p> <pre> : : ~ (){} </pre> <hr></id<<'></pre></'default>
C++ קונסטרוקטור פרמטרים
בנאי שיש לו פרמטרים נקרא בנאי פרמטר. הוא משמש כדי לספק ערכים שונים לאובייקטים שונים.
בואו נראה את הדוגמה הפשוטה של C++ Constructor עם פרמטרים.
#include using namespace std; class Employee { public: int id;//data member (also instance variable) string name;//data member(also instance variable) float salary; Employee(int i, string n, float s) { id = i; name = n; salary = s; } void display() { cout< <id<<\' \'<<name<<\' \'<<salary<<endl; } }; int main(void) { employee e1="Employee(101," \'sonoo\', 890000); creating an object of e2="Employee(102," \'nakul\', 59000); e1.display(); e2.display(); return 0; < pre> <p> <strong>Output:</strong> </p> <pre>101 Sonoo 890000 102 Nakul 59000 </pre> <h2>What distinguishes constructors from a typical member function?</h2> <ol class="points"> <li>Constructor's name is the same as the class's</li> <li>Default There isn't an input argument for constructors. However, input arguments are available for copy and parameterized constructors.</li> <li>There is no return type for constructors.</li> <li>An object's constructor is invoked automatically upon creation.</li> <li>It must be shown in the classroom's open area.</li> <li>The C++ compiler creates a default constructor for the object if a constructor is not specified (expects any parameters and has an empty body).</li> </ol> <p>By using a practical example, let's learn about the various constructor types in C++. Imagine you visited a store to purchase a marker. What are your alternatives if you want to buy a marker? For the first one, you ask a store to give you a marker, given that you didn't specify the brand name or colour of the marker you wanted, simply asking for one amount to a request. So, when we just said, 'I just need a marker,' he would hand us whatever the most popular marker was in the market or his store. The default constructor is exactly what it sounds like! The second approach is to go into a store and specify that you want a red marker of the XYZ brand. He will give you that marker since you have brought up the subject. The parameters have been set in this instance thus. And a parameterized constructor is exactly what it sounds like! The third one requires you to visit a store and declare that you want a marker that looks like this (a physical marker on your hand). The shopkeeper will thus notice that marker. He will provide you with a new marker when you say all right. Therefore, make a copy of that marker. And that is what a copy constructor does!</p> <h2>What are the characteristics of a constructor?</h2> <ol class="points"> <li>The constructor has the same name as the class it belongs to.</li> <li>Although it is possible, constructors are typically declared in the class's public section. However, this is not a must.</li> <li>Because constructors don't return values, they lack a return type.</li> <li>When we create a class object, the constructor is immediately invoked.</li> <li>Overloaded constructors are possible.</li> <li>Declaring a constructor virtual is not permitted.</li> <li>One cannot inherit a constructor.</li> <li>Constructor addresses cannot be referenced to.</li> <li>When allocating memory, the constructor makes implicit calls to the new and delete operators.</li> </ol> <h2>What is a copy constructor?</h2> <p>A member function known as a copy constructor initializes an item using another object from the same class-an in-depth discussion on Copy Constructors.</p> <p>Every time we specify one or more non-default constructors (with parameters) for a class, we also need to include a default constructor (without parameters), as the compiler won't supply one in this circumstance. The best practice is to always declare a default constructor, even though it is not required.</p> <p>A reference to an object belonging to the same class is required by the copy constructor.</p> <pre> Sample(Sample &t) { id=t.id; } </pre> <h2>What is a destructor in C++?</h2> <p>An equivalent special member function to a constructor is a destructor. The constructor creates class objects, which are destroyed by the destructor. The word 'destructor,' followed by the tilde () symbol, is the same as the class name. You can only define one destructor at a time. One method of destroying an object made by a constructor is to use a destructor. Destructors cannot be overloaded as a result. Destructors don't take any arguments and don't give anything back. As soon as the item leaves the scope, it is immediately called. Destructors free up the memory used by the objects the constructor generated. Destructor reverses the process of creating things by destroying them.</p> <p>The language used to define the class's destructor</p> <pre> ~ () { } </pre> <p>The language used to define the class's destructor outside of it</p> <pre> : : ~ (){} </pre> <hr></id<<\'>
מה מבדיל בנאים מפונקציית איברים טיפוסית?
- שם הקונסטרוקטור זהה לשם הכיתה
- ברירת מחדל אין ארגומנט קלט עבור בנאים. עם זאת, ארגומנטים של קלט זמינים עבור הבנאים העתקה ובעלי פרמטרים.
- אין סוג החזרה עבור בנאים.
- בנאי אובייקט מופעל אוטומטית עם היצירה.
- יש להציג אותו בשטח הפתוח של הכיתה.
- המהדר C++ יוצר בנאי ברירת מחדל עבור האובייקט אם בנאי לא צוין (מצפה לפרמטרים כלשהם ויש לו גוף ריק).
באמצעות דוגמה מעשית, בואו ללמוד על סוגי הבנאים השונים ב-C++. תאר לעצמך שביקרת בחנות כדי לרכוש טוש. מהן האלטרנטיבות שלך אם אתה רוצה לקנות מרקר? עבור הראשון, אתה מבקש מחנות לתת לך טוש, בהתחשב בכך שלא ציינת את שם המותג או הצבע של הטוש שרצית, פשוט מבקשת סכום אחד לבקשה. אז, כשרק אמרנו, 'אני רק צריך טוש', הוא היה מוסר לנו את כל הטוש הפופולרי ביותר בשוק או בחנות שלו. בנאי ברירת המחדל הוא בדיוק מה שהוא נשמע! הגישה השנייה היא להיכנס לחנות ולציין שאתה רוצה סמן אדום של המותג XYZ. הוא ייתן לך את הסמן הזה מאז שהעלית את הנושא. הפרמטרים נקבעו במקרה זה כך. ובנאי בעל פרמטר הוא בדיוק מה שהוא נשמע! השלישי מחייב אותך לבקר בחנות ולהצהיר שאתה רוצה טוש שנראה כך (טוש פיזי על היד שלך). בעל החנות יבחין בכך בסמן הזה. הוא יספק לך סמן חדש כשתאמר בסדר. לכן, צור עותק של הסמן הזה. וזה מה שבונאי העתקות עושה!
מוצר numpy dot
מהם המאפיינים של קונסטרוקטור?
- לבנאי יש אותו שם כמו המחלקה אליה הוא שייך.
- למרות שזה אפשרי, בנאים מוצהרים בדרך כלל בחלק הציבורי של המחלקה. עם זאת, זה לא חובה.
- מכיוון שבנאים אינם מחזירים ערכים, חסר להם סוג החזרה.
- כאשר אנו יוצרים אובייקט מחלקה, הבנאי מופעל מיד.
- יתכנו בנאים בעומס יתר.
- הכרזה על קונסטרוקטור וירטואלי אינה מותרת.
- אי אפשר לרשת בנאי.
- לא ניתן להפנות אל כתובות הבנאים.
- בעת הקצאת זיכרון, הבנאי מבצע שיחות מרומזות לאופרטורים החדשים והמחוקים.
מהו בונה העתקות?
פונקציית חבר המכונה בונה העתקה מאתחלת פריט באמצעות אובייקט אחר מאותה מחלקה - דיון מעמיק על Copy Constructors.
בכל פעם שאנו מציינים בנאי אחד או יותר שאינם ברירת מחדל (עם פרמטרים) עבור מחלקה, עלינו לכלול גם בנאי ברירת מחדל (ללא פרמטרים), מכיוון שהקומפיילר לא יספק אחד בנסיבות אלו. השיטה הטובה ביותר היא תמיד להכריז על בנאי ברירת מחדל, למרות שזה לא נדרש.
הפניה לאובייקט השייך לאותה מחלקה נדרשת על ידי בנאי ההעתקה.
Sample(Sample &t) { id=t.id; }
מהו הרס ב-C++?
פונקציית איברים מיוחדת מקבילה לבנאי היא הרס. הבנאי יוצר אובייקטי מחלקה, אשר מושמדים על ידי המשמיד. המילה 'הורס', ואחריה סמל טילדה () זהה לשם המחלקה. אתה יכול להגדיר רק משמיד אחד בכל פעם. שיטה אחת להשמדת אובייקט שנעשה על ידי בנאי היא להשתמש בהרס. לא ניתן להעמיס על משמידים כתוצאה מכך. ההורסים לא לוקחים שום ויכוח ולא מחזירים כלום. ברגע שהפריט יוצא מהטווח, הוא נקרא מיד. הרסנים משחררים את הזיכרון המשמש את האובייקטים שהבנאי יצר. Destructor הופך את תהליך יצירת הדברים על ידי השמדתם.
השפה המשמשת להגדרת ההורס של הכיתה
~ () { }
השפה המשמשת להגדרת ההורס של הכיתה מחוצה לה
: : ~ (){}
'default>