欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當前位置:主頁 > 軟件編程 > C語言 >

解析設計模式中的Prototype原型模式及在C++中的使用

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

原型模式的意圖是用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象。

適用性 
當要實例化的類是在運行時刻指定時,例如,通過動態(tài)裝載;或者
為了避免創(chuàng)建一個與產(chǎn)品類層次平行的工廠類層次時;或者
當一個類的實例只能有幾個不同狀態(tài)組合中的一種時。建立相應數(shù)目的原型并克隆它們可能比每次用合適的狀態(tài)手工實例化該類更方便一些。

關于這個模式,突然想到了小時候看的《西游記》,齊天大圣孫悟空再發(fā)飆的時候可以通過自己頭上的 3 根毛立馬復制出來成千上萬的孫悟空,對付小妖怪很管用(數(shù)量最重要)。

原型模式也正是提供了自我復制的功能,就是說新對象的創(chuàng)建可以通過已有對象進行創(chuàng)建。在 C++中拷貝構造函數(shù)(Copy Constructor)曾經(jīng)是很對程序員的噩夢,淺層拷貝和深層拷貝的魔魘也是很多程序員在面試時候的快餐和系統(tǒng)崩潰時候的根源之一。

結構圖:

原型模式提供了一個通過已存在對象進行新對象創(chuàng)建的接口(Clone),Clone()實現(xiàn)和具體的實現(xiàn)語言相關,在 C++中我們將通過拷貝構造函數(shù)實現(xiàn)之。

例子
注意事項:
(1)根據(jù)原型模式的UML圖可以知道,實現(xiàn)要依賴于抽象要不要依賴與具體
(2)拷貝構造函數(shù)是核心,而且針對c++要進行的是深拷貝
(3)克隆函數(shù)的關鍵就是調(diào)用拷貝構造函數(shù)

#include <iostream> 
using namespace std; 
 
class Student 
{ 
protected: 
  int id; 
  char name[10]; 
 
public: 
  Student() 
  { 
  } 
  ~Student() 
  { 
    cout<<"Desconstuct...."<<endl; 
  } 
 
  virtual Student *Clone() 
  {} 
   
  virtual void Show() 
  { }  
}; 
 
   
class StudentTypeA:public Student 
{ 
public: 
  StudentTypeA(const char *name_input) 
  { 
    strcpy(name, name_input);  
    this->id = 0; 
    cout<<"Construction....."<<endl; 
  } 
 
  StudentTypeA(const StudentTypeA&other) 
  { 
    cout<<"Copy Construction..."<<endl; 
    this->id = other.id; 
    this->id ++; 
    strcpy(this->name, other.name); 
  } 
 
  virtual StudentTypeA *Clone() 
  { 
    StudentTypeA *tmp = new StudentTypeA(*this); 
    return tmp; 
  } 
  void Show() 
  { 
    cout<<"Student id == "<< id << " name == "<< name <<endl; 
  } 
  ~StudentTypeA() 
  { 
    cout<<"Deconstruction StudentTypeA"<<endl; 
  } 
}; 
 
int main() 
{ 
  Student *student1 = new StudentTypeA("fulima"); 
  Student *student2 = student1->Clone(); 
  Student *student3 = student2->Clone();   
   
  student1->Show(); 
  student2->Show(); 
  student3->Show();   
   
  return 0; 
} 

網(wǎng)頁制作CMS教程網(wǎng)絡編程軟件編程腳本語言數(shù)據(jù)庫服務器

如果侵犯了您的權利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權所有