C 中的多型和Objective C中的「多型」

2021-05-28 17:22:09 字數 2608 閱讀 9504

c++中的多型(兩種):

編譯時匹配:函式過載,依據成員函式的名字、形參型別、形參個數等不同來實現不同的函式呼叫匹配;

執行時匹配:虛函式,具體就是通過將父類或抽象類宣告時成員函式宣告為virtual,然後子類繼承並實現,應用時,通過將子類物件位址賦給其父類型別的指標(注,抽象類不能例項化,即不能定義物件,但是可以定義指向該類型別的指標和引用),通過呼叫賦值後的父類指標指向的虛函式來達到呼叫不同子類對該虛函式的不同實現的目的。

c++中實現執行時多型使用virtual.

obiective-c中實現「多型」使用protocol. 具體請看如下例項,(例項摘自《objective-c beginner's guide》)

printing.h

@protocol printing

-(void) print;

@end

fraction.h

#import #import "printing.h"

@inte***ce fraction: nsobject

-(fraction*) initwithnumerator: (int) n denominator: (int) d;

-(void) setnumerator: (int) d;

-(void) setdenominator: (int) d;

-(void) setnumerator: (int) n anddenominator: (int) d;

-(int) numerator;

-(int) denominator;

@end

fraction.m

#import "fraction.h"

#import @implementation fraction

-(fraction*) initwithnumerator: (int) n denominator: (int) d

return self;

}-(void) print

-(void) setnumerator: (int) n

-(void) setdenominator: (int) d

-(void) setnumerator: (int) n anddenominator: (int) d

-(int) denominator

-(int) numerator

-(fraction*) copywithzone: (nszone*) zone

@end

complex.h

#import #import "printing.h"

@inte***ce complex: nsobject

-(complex*) initwithreal: (double) r andimaginary: (double) i;

-(void) setreal: (double) r;

-(void) setimaginary: (double) i;

-(void) setreal: (double) r andimaginary: (double) i;

-(double) real;

-(double) imaginary;

@end

complex.m

#import "complex.h"

#import @implementation complex

-(complex*) initwithreal: (double) r andimaginary: (double) i

return self;

}-(void) setreal: (double) r

-(void) setimaginary: (double) i

-(void) setreal: (double) r andimaginary: (double) i

-(double) real

-(double) imaginary

-(void) print

@end

main.m

#import #import "fraction.h"

#import "complex.h"

int main( int argc, const char *argv )

// false

if ( [comp conformstoprotocol: @protocol( nscopying )] == yes )

// free memory

[frac release];

[comp release];

return 0;

}

output

the fraction is: 3/10

the complex number is: 5.000000 + 15.000000i

fraction conforms to nscopying

C 中的多型和多型物件模型

所謂多型,也就是說 多種形態 c 中虛函式就是為了實現多型 虛函式 類的成員函式前面加上virtual關鍵字,則這個函式就是虛函式 多型的形成條件 1 虛函式的重寫 2 父類的指標或者引用呼叫重寫的虛函式 例如 a p b a是乙個父類,b是乙個子類物件 這個時候就是形成了多型。這個時候呼叫函式與型...

C 中的繼承和多型

只允許單繼承,多繼承可以由介面來實現,繼承是可以傳遞的,類可以定義虛方法 虛屬性 虛索引指示器,而派生類能重寫這些成員,以事項物件導向程式設計中的多型 1.類的繼承 using system using system.collections.generic using system.linq usi...

C 中的多型和虛函式

1.c 中的虛函式 c 中的虛函式的作用主要是實現了多型的機制。關於多型,簡而言之就是用父型別別的指標指向其子類的例項,然後通過父類的指標呼叫實際子類的成員函式。這種技術可以讓父類的指標有 多種形態 這是一種泛型技術。所謂泛型技術,說白了就是試圖使用不變的 來實現可變的演算法。比如 模板技術,rtt...