C++實現原型模式(複製簡歷)
阿新 • • 發佈:2019-01-01
本程式碼實現了大話設計模式上覆制簡歷;
1.克隆物件比直接建立物件的優點在於,克隆是將原有物件的行為屬性帶到了新的物件中。
2.C++沒有克隆方法,要克隆一個物件,需要藉助拷貝建構函式來實現。拷貝建構函式中實現拷貝物件有淺拷貝和深拷貝:淺拷貝是指物件複製時,只是對於物件中的資料成員進行值拷貝;深拷貝是指物件賦值時,對於物件的簡單資料成員進行值拷貝,對於物件中的動態成員(堆或者其他系統資源),要重新分配動態空間。
當類不定義拷貝建構函式的時候,編譯器會自動生一個建構函式,叫做預設拷貝建構函式。預設拷貝建構函式使用淺拷貝方式。如果類中含有動態資料成員,就必須使用深拷貝方式實現拷貝建構函式,否則,在銷燬物件時,兩個物件的解構函式將對同一個記憶體空間釋放兩次,產生執行時錯誤。
程式碼:
class Experience { public: string timeArea; string company; void WorkExperience(string timeArea, string company) { this->timeArea = timeArea; this->company = company; } }; class Resume { private: string name; string sex; string age; //string timeArea; //string company; public: Experience *WorkExperience; Resume(string name) { this->name = name; WorkExperience = new Experience(); } Resume(const Resume&C) { WorkExperience = new Experience(); *WorkExperience = *WorkExperience; this->sex = C.sex; this->age = C.age; this->name = C.name; } void SetPersonalInfo(string sex, string age) { this->sex = sex; this->age = age; } void SetWorkExperience(string timeArea, string company) { WorkExperience->WorkExperience(timeArea, company); //this->timeArea = timeArea; //this->company = company; } void Display() { cout<<name<<" "<<sex<<" "<<age; cout<<endl; cout<<"工作經歷:"<<WorkExperience->timeArea<<" "<<WorkExperience->company; cout<<endl; } }; int main(void) { Resume A("Rambo"); A.SetPersonalInfo("M", "18"); A.SetWorkExperience("2013","SQL"); Resume B(A); B.SetWorkExperience("2014","C++"); A.Display(); B.Display(); getchar(); return 0; }