Solidity語言學習筆記 34 繼承

2021-08-20 21:24:39 字數 1919 閱讀 3223

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.killbase1.killbase1super

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單元 特殊變數和函式 表示式和控制結構 控制...