Download presentation
Presentation is loading. Please wait.
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; }
Similar presentations