函数

重定义

不支持重定义,会在编译时候报错

pragma solidity ^0.4.0;

contract test {
uint public a =100;
function changeA () view returns(uint ){
a = 700;
return a;
}
}

继承

  • 属性继承:public  internal
  • 方法继承:public  internal  external
  • 继承重载
  • 多重继承按顺序,同名属性(方法)按最后一个为准,如果子合约自身有,覆盖其他

构造函数

在合约部署时候就自动执行

  • 使用合约同名的方法名,0.4版本
  • 直接使用constructor()函数
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

  • 函数内部的constant在4.0版本中和view等价,在5.0版本中被废弃
  • 全局变量,constant变量,局部变量没有这个属性
  • 全局变量加上constant属性,就不能被修改

getter

  • public修饰符默认生产get方法,用于外部调用,不能在函数内部调用

    function get() external view returns(uint){
    return a;
    }
  • mapping特殊,会生成以下函数

        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 ;
}
}

【Solidity】学习(3)的更多相关文章

  1. solidity学习-cryptoPunks为实例

    在这里使用cryptoPunks为实例来进行solidity的介绍,一般这些内容理解了就能够进行相对简单的智能合约的编写了,同时会添加一些我认为也十分重要的内容学习文档为http://solidity ...

  2. solidity 学习笔记(7)内联汇编

    为什么要有内联汇编? //普通循环和内敛汇编循环比较 pragma solidity ^0.4.25; contract Assembly{ function nativeLoop() public ...

  3. solidity 学习笔记(6)call 函数

    call() 方法 call()是一个底层的接口,用来向一个合约发送消息,也就是说如果你想实现自己的消息传递,可以使用这个函数.函数支持传入任意类型的任意参数,并将参数打包成32字节,相互拼接后向合约 ...

  4. solidity 学习笔记(5)接口

    接口:不用实现方法,仅仅定义方法. pragma solidity ^; contract cat{ //cat实际上实现了接口animalEat,因为他们有相同的方法. string name; f ...

  5. solidity 学习笔记(3) 函数修饰符/继承

    修饰符: 函数修饰符有 constant  view pure 其中 constant和view的功能是一样的  不会消耗gas 也就是说不会做任何存储   constant在5.0以后的版本中被废弃 ...

  6. solidity 学习笔记 2 (二维数组)

    solidity 二维数组: pragma solidity ^0.4.23; contract twoArray{ uint[2][3] grade =[[20,30],[40,50],[45,60 ...

  7. solidity学习笔记

    一 pragam solidity ^0.4.23; contract helloword{ string public  name ="hello"; function getN ...

  8. 以太坊智能合约开发 Solidity学习

    1. pragma solidity >=0.4.22 <0.6.0;//版本号,头文件 contract BooleanTest { bool _a;//默认返回false int nu ...

  9. solidity 学习笔记(4)library库

    library库的申明: library SafeMath{ functrion mul(uint a,uint b) public returns (uint){ uint c= a*b; asse ...

  10. cryptopunks的代码解释

    1.imageHash就是将punk所有图像合在一起的那张图punks.png进行hash得到一个值,并将该值存储到链上,用处就是你可以通过将图像hash然后跟该值对比看图像对不对.这就是它的用处,在 ...

随机推荐

  1. python之列表及其方法---整理集

    列表类,类名是list 通过list类创建对象,使用中括号 列表特性: 使用中括号括起来 中间用逗号分隔每个元素 元素可以是数字.字符串.布尔值.列表 列表中可以嵌套列表 列表中每个元素的下标从0开始 ...

  2. Gulp教程之:Gulp能做什么,前端装逼为何要用它

    我们先说说 平时web开发遇到的一些场景 和 苦恼无奈的情况: JavaScript和CSS的版本问题 我们都知道 JavaScript和CSS属于静态文件,如果地址不变,浏览器会缓存这些文件,那就意 ...

  3. 小强学渲染之Unity Shader噪声应用

    之前玩Tencent的仙剑4手游时,杀死boss会看到boss有“消融”的效果,就是身体上有多个洞洞然后往四周扩散直至尸体完全消失,但效果是没有关闭背面剔除的“穿帮”效果,可能也是考虑性能因素. em ...

  4. Git简单生成生成公钥和私钥方法

    Git简单生成生成公钥和私钥方法 Git配置 Git安装完之后,需做最后一步配置.打开git bash,分别执行以下两句命令 git config --global user.name “用户名” g ...

  5. PowerScript数据类型及变量

    PowerBuilder的标准数据类型共有14种 数据类型 意    义 示    例 Blob 二进制数据 可存放可变长度的大量数据,如图片,其它类型的文档数据. 如保存位图 Boolean 布尔型 ...

  6. 记录一次程序输出和DB查询不匹配的问题

    今天发生一件很神奇的事情,我用TP读取DB数据,然后打印出来的数据,和直接通过sequal pro查询出来的数据(某一列),怎么对都对不起来,我尝试 清空TP缓存 MYSQL服务重启 mac重启 都无 ...

  7. sqlserver改主键初始ID

  8. Disk

    一.简介 二.其他 1)Disk I/O

  9. Python集合框架

  10. Linux进程的实际用户ID和有效用户ID

    转自:https://blog.csdn.net/hulifangjiayou/article/details/47400943 在Linux中,每个文件都有其所属的用户和用户组,默认情况下是文件的创 ...