pragma solidity ^0.4.16;
contract owned
address owner;
}// 使用`is`繼承另乙個合約。
// 子合約可以訪問所有非私有成員,包括
// 內部函式和狀態變數。
// 不過,不能通過`this`來外部訪問這些。
contract mortal is owned
}// 這些抽象合約僅用於建立編譯器已知的介面。
// 注意函式沒有函式體。
// 如果合約沒有實現全部函式,那它只能是介面。
contract config
contract namereg
// 可以多重繼承。
// 請注意,`owned`也是`mortal`的父類,
// 但只有乙個`owned`的例項(類似c++中的虛擬繼承)。
contract named is owned, mortal
// 函式可以被另乙個具有相同名稱
// 和相同數量/型別的輸入引數的函式覆蓋。
// 如果重寫函式有不同輸出引數的型別,會發生錯誤。
// 本地和基於訊息的函式呼叫都會將這些覆蓋函式考慮在內。
function kill() public
}}// 如果建構函式接受引數,引數需要在頭部中提供。
// 或者在派生合約的構造器裡
// 使用修飾符呼叫方式modifier-invocation-style見下文
contract pricefeed is owned, mortal, named("goldfeed")
function get() public view returns(uint r)
uint info;
}
pragma solidity ^0.4.0;
contract owned
address owner;
}contract mortal is owned
}contract base1 is mortal
}contract base2 is mortal
}contract final is base1, base2
final.kill()
base2.kill
base1.kill
base1
super
pragma solidity ^0.4.0;
contract owned
address owner;
}contract mortal is owned
}contract base1 is mortal
}contract base2 is mortal
}contract final is base1, base2
pragma solidity ^0.4.0;
contract base
}contract derived is base(7)
}
第二種是在派生的構造器的頭部,修飾符被呼叫時實現base(_y * _y)
。
如果父構造函式引數依賴於派生合約的建構函式,則必須使用第二種方法。
如果在這個荒謬的例子中,這兩個地方都被使用,修飾符樣式的引數優先。
// 以下**無法編譯
pragma solidity ^0.4.0;
contract x {}
contract a is x {}
contract c is a, x {}
Solidity語言學習 (三)
使用var關鍵字時,第一次賦值給變數,編譯器會自動推斷變數的型別,而且推斷後不能更改這個變數的型別了,如果更改了就會出錯,還有就是不能在函式引數中使用。注意 有時候var會推斷出乙個錯誤的型別。案例 pragma solidity 0.4.18 contract var 結果為 solidity中v...
Solidity語言學習筆記 39 獨立彙編
從組合語言轉為位元組碼應該盡可能的少坑。控制流應該容易檢測來幫助進行形式驗證與優化。pragma solidity 0.4.16 contract c default memory allocator function allocate size pos the contract function ...
Solidity學習筆記(3)
在此後的學習,將更加深入理解solidity的方方面面 solidity原始檔的布局 引入其他的原始檔 注釋合約的結構 型別變數型別 列舉 參考型別對映 包括左賦值的操作符 在基本型別間的轉換 型別匯出 單元區域性和全域性可見變數 ether單元 time單元 特殊變數和函式 表示式和控制結構 控制...