C ++ البناة
المنشئون
المُنشئ في C ++ هو طريقة خاصة يتم استدعاؤها تلقائيًا عند إنشاء كائن من فئة.
لإنشاء مُنشئ ، استخدم نفس اسم الفئة ، متبوعًا بالأقواس ()
:
مثال
class MyClass { // The class
public:
// Access specifier
MyClass() {
// Constructor
cout << "Hello World!";
}
};
int main() {
MyClass myObj; // Create an object of MyClass (this will call
the constructor)
return 0;
}
ملاحظة: المُنشئ له نفس اسم الفئة ، وهو دائمًا public
، وليس له أي قيمة مرتجعة.
معلمات المنشئ
يمكن للمُنشئين أيضًا أن يأخذوا المعلمات (تمامًا مثل الوظائف العادية) ، والتي يمكن أن تكون مفيدة لتعيين القيم الأولية للسمات.
الفئة التالية لها brand
، model
وسمات year
، ومنشئ بمعلمات مختلفة. داخل المُنشئ ، قمنا بتعيين السمات مساوية لمعلمات المُنشئ ( brand=x
، إلخ). عندما نستدعي المُنشئ (عن طريق إنشاء كائن من الفئة) ، فإننا نمرر المعلمات إلى المُنشئ ، والتي ستحدد قيمة السمات المقابلة لها:
مثال
class Car { // The class
public: // Access specifier
string brand; // Attribute
string model; // Attribute
int year; // Attribute
Car(string x, string y, int z)
{ // Constructor with parameters
brand =
x;
model = y;
year = z;
}
};
int main() {
//
Create Car objects and call the constructor with different values
Car carObj1("BMW", "X5", 1999);
Car carObj2("Ford", "Mustang",
1969);
// Print values
cout << carObj1.brand << " "
<< carObj1.model << " " << carObj1.year << "\n";
cout <<
carObj2.brand << " " << carObj2.model << " " << carObj2.year << "\n";
return 0;
}
تمامًا مثل الوظائف ، يمكن أيضًا تعريف المنشئات خارج الفصل الدراسي. أولاً ، قم بتعريف المُنشئ داخل الفصل ، ثم قم بتعريفه خارج الفئة عن طريق تحديد اسم الفئة ، متبوعًا بعامل تحليل النطاق ::
، متبوعًا باسم المُنشئ (وهو نفس الفئة):
مثال
class Car { // The class
public: // Access
specifier
string brand; // Attribute
string model; // Attribute
int year;
// Attribute
Car(string x, string y, int z); //
Constructor declaration
};
// Constructor definition outside the
class
Car::Car(string x, string y, int z) {
brand = x;
model = y;
year = z;
}
int main() {
// Create
Car objects and call the constructor with different values
Car
carObj1("BMW", "X5", 1999);
Car carObj2("Ford", "Mustang", 1969);
// Print values
cout << carObj1.brand << " " <<
carObj1.model << " " << carObj1.year << "\n";
cout <<
carObj2.brand << " " << carObj2.model << " " << carObj2.year << "\n";
return 0;
}