函数
重定义
不支持重定义,会在编译时候报错
pragma solidity ^0.4.0; contract test { uint public a =100; function changeA () view returns(uint ){ a = 700; return a; } }
继承
构造函数
在合约部署时候就自动执行
pragma solidity ^0.4.0; contract test { address public add; constructor(){ //合约部署之际就会将当前地址赋值给add add = msg.sender; } }
析构函数
kill合约
pragma solidity ^0.4.0; contract father{ address add; uint public a = 1; constructor (){ add = msg.sender; } function ins() { a += 10; } //执行之后,再次点击a报错提示 function kill(){ if(add == msg.sender) selfdestruct(add); } }
constant
getter
function get() external view returns(uint){ return a; }
mapping(int =>string) map; function mapTest(int _a) view returns(string){ return map[_a]; }
modifier
pragma solidity ^0.4.0; contract test { uint public a; address public add; constructor(){ add = msg.sender; } modifier OnlyAdd{ require(add == msg.sender); _; } //首先会判断是否满足modifier中require的条件,如果满足则执行语句,不满足则回滚 function changeA(uint _a) OnlyAdd{ a = _a; } }
执行顺序(1)
pragma solidity ^0.4.0; contract test { uint public a; modifier m1{ a = 1; _; a = 2; } //讲_中的内容全部替换成changeA中的内容 function changeA() m1{ a = 100 ; } }
执行顺序(2)
pragma solidity ^0.4.0; contract test { uint public a; modifier m1{ a = 1; _; a = 2; } modifier m2{ a = 3; _; a = 4; } //执行顺序是,先遇到m1,执行a=1,接着将m2替换m1中的_ //执行m2中的a=3,遇到_,用函数体替代之,执行完m2 //最后执行m1中剩余部分 function changeA() m1 m2{ a = 100 ; } }
原文:https://www.cnblogs.com/lhw-/p/10656842.html