السلام عليكم ورحمه الله وبركاته ،، مترجم سي++ مترجم خدوم للغايه حيث يقوم في بعض الأحيان "بخدمه" وهي التحويل من نوع بيانات عادي الى كائن وبالتالي يستدعي داله البناء وهو ما يعرف بـ implicit conversion .. في البدايه قد يبدوا لك الأمر مريح جدا وبلا مشاكل ،، شاهد المثال التالي :
[color= #007f00;]#include using namespace std ; class Student{private : int mNumber ; string mName ; public : Student(int num,string s=""):mName(s),mNumber(num) {} Student() { mNumber=0 ; mName="" ; } string getName () const { return mName ; } int getNumber () const { return mNumber; }}; void show ( const Student& std ){cout << "Name : " << std.getName() << endl << "Number : " << std.getNumber() << endl << endl; } int main (int argc ,char** argv){ Student s1(2,"Ahmed"); show(s1); Student s2 = 5 ; show(s2); Student s3 ; s3 = 4 ; show(s3); show(56); // implicit conversion}
s3 = 4;
show(56);
Student s2 = 5;
Student s2 = Student(5);
s3 = (Student)4;
show(Student(56));
explicit Student(int num,string s=""):mName(s),mNumber(num) {}
#include using namespace std ; class Student{private : int mNumber ; string mName ; public : Student(int num):mNumber(num) {} Student (string s) : mName(s) { } Student() { mNumber=0 ; mName="" ; } Student operator + (const Student& rhs); string getName () const { return mName ; } int getNumber () const { return mNumber; }}; Student Student :: operator+ (const Student& rhs){ Student tmp = mNumber + rhs.mNumber ; return tmp ;} void show ( const Student& std ){cout << "Name : " << std.getName() << endl << "Number : " << std.getNumber() << endl << endl; } int main (int argc ,char** argv){ Student s1(3); Student s2(4); Student s3 ; s3 = s1 + s2 ; s3 = s3 + 3 ; show(s3); string st = "dd" ; Student s4 ; s4 = s1 + st ; show(s4); }
Student s3;s3 = s1 + s2;s3 = s3 + 3;show(s3);
string st = "dd";Student s4;s4 = s1 + st;show(s4);
Student operator+ (const Student& rhs);
s3 = s2 + 3; // if no explicit
s3 = 3 + s3;
student& operator+ (const Student& s1 , const Student& s2);
s3 = 3 + 3;