freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

c程序設計實踐教程(下)ppt-文庫吧資料

2024-10-23 00:26本頁面
  

【正文】 int No。 – 謹慎使用友元。 – 友元關系沒有繼承性。例如,說明類 A是類 B的友元,類 B是類 C的友元時,類 A并不一定是類 C的友元。 } 程序運行結果: name:張三 ,sex:男 ,birthday: 因 Person類為 Date類的友元,在 Person類的成員函數(shù)可直接操作 Date類的對象 birthday的數(shù)據(jù)成員。 void main( ) { Person p(“張三 ” ,1983,8,20,”男 ” )。endl。.? 39。 } void display( ) { coutname:name,sex:sex。 =m。 strcpy(sex,s)。 Date birthday。 class Person{ char name[12]。 } friend class Person。day=d。 public: Date(int y=0,int m=0,int d=0){ year=y。 ? 例 友元類。 友元類 ? 若聲明 A類為 B類的友元,則 A類的所有成員函數(shù)都成為 B類的友元函數(shù)。//聲明類 A的成員函數(shù) f( ) }。 }。 – 友元函數(shù)可直接訪問相關類中的所有成員。 – 友元函數(shù)不是類的成員,不帶 this指針,因此必須將對象名或?qū)ο蟮囊米鳛橛言瘮?shù)的參數(shù),并在函數(shù)體中用運算符 “ .”來訪問對象的成員。 ? 友元函數(shù)說明: – 友元函數(shù)應在類中說明,可放在類的私有、公有或保護部分,效果一樣。 coutThe distance is:distance(a,b)endl。 return sqrt(dx*dx+dy*dy)。 p1,Pointamp。 普通函數(shù) distance( )聲明為 Point類的友元函數(shù)。)。 } friend double distance(Pointamp。 } int GetX( ){ return x。 public: Point(int i=0,int j=0){ x=i。 ? 例 用友元函數(shù)的方法計算兩點距離。 ? 友元分為:友元函數(shù)和友元類。 ? 使用友元可在對象外部直接訪問對象私有的和保護的數(shù)據(jù)成員。 ( )。 } }。 } void Show( ) { ( )。 width=w。 int length,width。 } }。 coutConstructor of class Point is called.\n。 public: Point(int a,int b) { x=a。 ? 例 初始化對象成員。 – 若類中包含對象成員,則在創(chuàng)建該類的對象時,先調(diào)用對象成員的構造函數(shù),初始化相應的對象成員,后執(zhí)行該類的構造函數(shù),初始化該類的其他成員。 strcpy(sex,s)。 … }。 Date birthday。 class Person{ char name[12]。day=d。 public: Date(int y,int m,int d){ year=y。 } s t u d e n \0 t 對象成員與構造函數(shù) ? 對象成員:一個類的對象可做另一個類的數(shù)據(jù)成員。 strcpy(p,)。 – 定義拷貝構造函數(shù),避免上述錯誤: String(Stringamp。 } s1 堆內(nèi)存 s2 – 執(zhí)行 A行語句:調(diào)用默認拷貝構造函數(shù),用 s1對象初始化 s2對象,使 s2對象的成員指針 p與 s1對象的成員指針 p指向同一片內(nèi)存。//A ( )。 void main( ) { String s1(student)。\n39。 } ~String( ){ delete []p。 strcpy(p,c)。 include include class String{ char *p。 – 何時顯式定義拷貝構造函數(shù)? 若類中包含指向動態(tài)內(nèi)存的指針時,用默認的拷貝構造函數(shù)初始化對象,將帶來嚴重問題,如例 。 – 默認拷貝構造函數(shù)的功能是把一個已經(jīng)存在的對象的每個數(shù)據(jù)成員的值逐個復制到新建立對象對應的數(shù)據(jù)成員中。 ? 若函數(shù)形參是對象的引用,則調(diào)用該函數(shù)時,不調(diào)用拷貝構造函數(shù),如本例的Mid函數(shù)所示。 coutDistance(p0,p3)endl。 ()。 ()。//調(diào)用拷貝構造函數(shù) Point p3=p1。 } void main( ) { Point p0,p1(8,15)。 int y=(()+())/2。 p1,Pointamp。 return sqrt(dx*dx+dy*dy)。 double Distance(Point p1,Point p2) { int dx=()()。\n39。 } int GetY( ){ return y。 cout調(diào)用了拷貝構造函數(shù) !\n。 t) //拷貝構造函數(shù) { x=。y=b。 include include class Point{ int x,y。 ? 定義一個拷貝構造函數(shù)的一般形式為: ClassName::ClassName(ClassName amp。 并不做隱式類型轉(zhuǎn)換,等價于: Money m3()。 ( )。 ( )。 ( )。 單參數(shù) 構造函數(shù) void main( ) { Money m1(25,5,7),m2()。 } void print( ) { coutyuan“元 ” jiao“角 ” fen“分 \n。jiao=j。fen=t%10。 yuan=t/100。 include class Money{ int yuan,jiao,fen。 構造函數(shù)的類型轉(zhuǎn)換功能 ? 如果類定義中提供了只帶一個參數(shù)(沒有其它參數(shù),或其它參數(shù)都有缺省值)的構造函數(shù),則當一個其它類型的數(shù)值或變量 x賦值給該類的對象 A時,由于類型不一致,系統(tǒng)自動以 x為實參調(diào)用該類的 單參數(shù)構造函數(shù) ,創(chuàng)建一個該類的臨時對象,并將該臨時對象賦值給 A,從而實現(xiàn)了隱式類型轉(zhuǎn)換。 } 申請動態(tài)內(nèi)存 釋放動態(tài)內(nèi)存 ? 對象釋放順序: – 對象釋放的順序與創(chuàng)建的順序正好相反。 void main( ){ Person p(“John”,20)。ageendl。 } void Print(){ coutname39。 age=a。 strcpy(name,n)。 int age。 ? 例 使用析構函數(shù),收回動態(tài)分配的存儲空間。 ? 需要顯式定義析構函數(shù)的典型情況: – 類中包含指向動態(tài)內(nèi)存的指針數(shù)據(jù)成員。其格式為: ClassName::~ClassName( ){ } 它不執(zhí)行任何操作。 – 在相同的生存期的情況下,先創(chuàng)建的對象后撤銷,后創(chuàng)建的對象先撤銷。 } 程序運行結果: Constructor with parameters called. Default constructor called. 5,8 0,0 Constructor with parameters called. 3,2 Destructor ,2 Exit main! Destructor ,0 Destructor ,8 從該程序的輸出結果看: ? 當創(chuàng)建對象時,系統(tǒng)自動調(diào)用相匹配的構造函數(shù); ? 當撤銷對象時,系統(tǒng)自動調(diào)用析構函數(shù)。 ()。 ( )。 void main( ) { Point p1(5,8),p2。 } }。y39。 } void print( ){ coutx39。y39。 } ~Point( ){ coutDestructor called.x39。y=b。coutDefault constructor called.\n。 include class Point{ int x,y。 – 析構函數(shù)沒有參數(shù),換言之,析構函數(shù)是唯一的,析構函數(shù)無法重載。 ? 特點: – 析構函數(shù)名必須與類名相同,并在其前面加上字符 “ ~”,以便和構造函數(shù)名相區(qū)別。因 Circle類定義了兩個缺省的構造函數(shù),編譯器不知道是調(diào)用 L1行定義的Circle( )還是調(diào)用 L2行定義的 Circle(int r=0)。 //L3 錯誤!產(chǎn)生二義性 Circle c2(5)。 } //L2 }。如: class Circle{ int radius。 匹配 (1) 匹配 (1) ?參數(shù)帶默認值的構造函數(shù)! ?所有參數(shù)都帶默認值的構造函數(shù)也是缺省的構造函數(shù)。 Circle c1(3)。 public: Circle(int r=0){ radius=r。 Circle c2。 }//(1) Circle( ){ } //(2) }。 因該類有帶一個參數(shù)的構造函數(shù),故系統(tǒng)不再提供無參的 缺省 構造函數(shù)! 匹配 (1) 沒有無參構造函數(shù) 對上例的修改方法 1: class Circle{ int radius。 Circle c1。 public: Circle(int r) { radius=r。 …… } 因系統(tǒng)提供了默認的構造函數(shù): Rectangle( ){ } ③ 只要類中定義了一個構造函數(shù), C++編譯器就不再提供缺省的構造函數(shù),如還想要無參構造函數(shù),則必須自己定義。 }。 public: float Area( ) 。缺省的構造函數(shù)無參,函數(shù)體為空,僅創(chuàng)建對象,不作任何初始化工作。 …… //類的實現(xiàn) void main( ){ Rectangle rect。 float Perimeter( )。 例: class Rectangle{ float length,width。 } 或 (方法 2) Point::Point(int x1,int y1):x(x1),y(y1){ } ? const數(shù)據(jù)成員、 const對象成員和從基類繼承的數(shù)據(jù)成員的初始化必須用初始化表。 例: (方法 1) Point::Point(int x1,int y1) { x=x1。 } ③ 執(zhí)行順序: 帶有初始化表的構造函數(shù)執(zhí)行時,首先執(zhí)行初始化表,然后再執(zhí)行函數(shù)體。 //匹配 (2) } ?構造函數(shù)中初始化數(shù)據(jù)成員的方法 – 在函數(shù)體中用賦值等語句進行 –使用成員 初始化列表 初始化列表 ① 格式: 在形參表和函數(shù)體之間,以:號開頭,由多個以逗號分隔的初始化項構成。 void main( ){ Point p1。y=b。y=0}。 例: class Point{ float x,y。 …… } 當遇此定義語句時,系統(tǒng)就調(diào)用構造函數(shù): Person(const char* n,int a,const char* s) 創(chuàng)建對象 p,并用實參初始化它的數(shù)據(jù)成員。 ? 構造函數(shù)的特殊性: ① 構造函數(shù)在定義類對象時由系統(tǒng)自動調(diào)用。 strcpy(sex,s)。 Person::Person(const char* n,int a,const char* s) { strcpy(name,n)。 char sex[4]。 例: class Person{ char name[12]。 strcpy(sex,s)。 public: Person(const char*n,int a,const char*s){ strcpy(name,n)。 int age。 ② 它不得有返回值,甚至連關鍵字 void也不許有。 ? 析構函數(shù): – 撤銷對象,收回它所占內(nèi)存,及完成其它清理工作。 構造函數(shù)和析構函數(shù) ? 構造函數(shù)和析構函數(shù):類的 特殊成員 。 }else name=NULL。 if() { name
點擊復制文檔內(nèi)容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1