首先,使用虛函數需要有壹個繼承關系。如Dog的父類是Animal,其中A有個virtual void do(),妳可以這樣寫:
Animal* b = new Dog(); //Dog是Animal
這樣,b只能使用Animal中提供的方法,因為編譯器只知道b是個Animal而不是是個Dog
這個時候,如果妳調用 b->do(),那麽,編譯器會獲取b的動態類型,也就是,此時b是當成Dog的,調用的是Dog::do()而不是Animal::do()
回到問題:
如果屬性和方法實現不同,說明它們不應該是屬於繼承的關系。如果以後擴展的可能性小,可以用switch代替多態。
這個看情況而定。如果子類數量有限,且不復雜,可以用switch列出所有的情況。缺點是不利於擴展。多態的缺點是需要構造很多子類,會使得代碼變得復雜,所以這個是看需求來的。
switch不是多態,它只是壹種if判斷語句,多態的行為是由編譯器決定的。
1,程序調用自身的編程技巧叫遞歸。
2.作為壹種算法,遞歸在編程語言中被廣泛使用。
3.壹個過程或函數在其定義或描述中有壹個直接或間接調用自身的方法。它通常將壹個大而復雜的問題轉化為壹個與原問題相似的小問題來解決。遞歸策略可以用很少的程序描述解題過程中所需的重復計算,大大減少了程序的代碼量。遞歸的能力在於用有限的語句定義無限的對