Presentation is loading. Please wait.

Presentation is loading. Please wait.

第九章 物件導向-進階.

Similar presentations


Presentation on theme: "第九章 物件導向-進階."— Presentation transcript:

1 第九章 物件導向-進階

2  9.1 “This” 指標 this 指標:  指向物件本身所在的位置: 當程式碼只有一份時,不同的物件需要
一個自己的指標指向自己,用以區別. Compiler會自己加入,this指標.

3  9.1 “This” 指標 例: 編譯器會自己修改成 實際呼叫時 class String { char *data; …..
Void show( ) { cout << data;} } String s1=“Ken”, s2=“Sue”; s1.show( ); s2.show( ); void show( String *this) {cout << this ->data;} show(&s1); show(&s2); 實際呼叫時

4  9.1 “This” 指標 例: 編譯器認得this / this指標的範例一 #include <iostream.h>
class Baby { private : char Name[16]; // 注意這兒,我宣告的大小是16 public : void Demo() cout << "Address = " << this << endl; } }; // 主程式 void main() Baby Julia, Amy; Julia.Demo(); Amy.Demo(); 編譯器認得this

5 9.1 “This” 指標 結果: Address = 0x0064FDD8 Address = 0x0064FDE8

6  9.1 “This” 指標 例: // this指標的範例二 #include <iostream.h>
#include <string.h> class Baby { private : char Name[16]; public : Baby( char *name ) strcpy( this->Name, name ); } void Demo() cout << "我的名字叫" << this->Name << endl; };

7  9.1 “This” 指標 例: // 主程式 void main( ) {
// 主程式 void main( ) { Baby Julia( "Julia" ), Amy( "Amy" ); Julia.Demo( ); Amy.Demo( ); }

8  9.1 “This” 指標 例: this的功能 // this指標的範例三 #include <iostream.h>
class MYINT { private : int nData; public : MYINT( int data = 0 ) nData = data; } void Assign( MYINT a ) nData = a.nData; void Show( ) cout << nData << endl; } MYINT& Add1( ) { ++nData; return *this; }; // 主程式 void main() MYINT a = 5, b = 3; a.Assign( b.Add1( ) ); //相當於a = ++b; a.Show( ); //要顯示4在螢幕上

9 9.2 虛擬指標 例: 虛擬函數(virtual) 在編譯時就依宣告 的型別連接函數

10 9.2 虛擬指標 例: 虛擬函數(virtual) 在編譯時並不做連接 執行時才做 函數的連接

11  9.2 虛擬指標 例: 虛擬函數(virtual)  Overloaded (重載) : 編譯時決定呼叫的函數
 Polymorphism(多型): 執行時才決定呼叫的函數

12  9.2 純粹虛擬函數 例: 純粹虛擬函數(abstract class) 不應該產生一個 instant為shape
virtual viod Shape::Show( ) { cout<<“爸爸是抽象類別”<<endl; }

13  9.2 純粹虛擬函數 例: 純粹虛擬函數(abstract class) ? Main( ) { Shape Graph;
Graph.Show; }

14  9.2 純粹虛擬函數 例: 純粹虛擬函數(abstract class) virtual viod Shape::Show( )=0 {
cout<<“爸爸是抽象類別”<<endl; }

15 9.2 純粹虛擬函數 例: 純粹虛擬函數(abstract class)  Shape2.cpp

16   9.2 純粹虛擬函數 9.2 純粹虛擬函數 例: 純粹虛擬函數(abstract class)
 Baby.cpp

17   9.2 純粹虛擬函數 9.2 純粹虛擬函數 例: 純粹虛擬函數(abstract class)
vptr vFunc1 GrandFather::vFunc1( ) cData vFunc2 GrandFather::vFunc2( ) fGrandFather vptr vFunc1 GrandFather::vFunc1( ) cData vFunc2 Father::vFunc2( ) fGrandFather fFather

18   9.3 friend 函數 例: friend 函數 class A { private: int privateA; }
class B A memberA; public: viod Demo( ) { memberA.privateA=5;} };

19   9.3 friend 函數 例: friend 函數 class A { private: friend class B;
int privateA; } class B A memberA; public: viod Demo( ) { memberA.privateA=5;} };

20   9.3 friend 函數 例: friend 函數 calss A { private: int privateA;
public: friend void Assign( A Data1, A Data2) Data1.privateA=Data2.private2; }


Download ppt "第九章 物件導向-進階."

Similar presentations


Ads by Google