实战篇

实战篇

注:以下代码来源于b站上面的基于以太坊的智能合约开发教程【Solidity】链接:https://www.bilibili.com/video/BV1St411a7Pk?p=34

重载

重载
1.函数名字相同
2.函数的参数不同(类型、数量)
3.不考虑函数的

pragma solidity >=0.4.15 <0.6.0;

contract chongzai
{
    uint public a=0;
    function fun(uint8 num)
    {
        a=100;
    
    }
    function fun(uint160 num)
    {
        a=200;
        
    }
    function test()
    {
        fun(256);
    }
}

在这里插入图片描述

函数参数命名

pragma solidity >=0.4.22 <0.6.0;

contract param
{
    uint public num;
    string public name;
    //传值
    function setParam(uint _num,string _name)
    {
        num=_num;
        name=_name;
    }
    //调用函数形式1:普通的传参方式
    function Test()
    {
        setParam(10,"aaa00");
    }
    //调用函数形式2:“传参名:值”
    function Test1()
    {
        setParam({_num:10,_name:"bbb00"});
    }
}

点击test1,名字是bbb00,当点击test后,名字就变成了aaa00

在这里插入图片描述
在这里插入图片描述

返回值

pragma solidity >=0.4.12 <0.6.0;

contract returnTest{
    
    //返回值可以没有名字
    function returnTest1() returns(uint mul)
    {
        uint a=100;
        return a;
    }
    //可以直接为返回值赋值,但是赋值的名字必须和返回值的名字相同
    function returnTest2() returns(uint mul)
    {
        mul=200;
    }
    //为返回值赋值,尽管函数里面有跟返回值一样的名字,但是以return的为准
    function returnTest3() returns(uint mul)
    {
        mul=200;
        uint a=300;
        return a;
    }
    //返回值可以是一个常量,它会自动匹配按序
    function returnTest4() returns(uint mul)
    {
        mul=200;
        return 4;
    }
    //函数可以有多返回值
    function returnTest5() returns(uint mul,uint a)
    {
        mul=500;
        uint b=300;
        return (mul,b);
    }
    //返回值可以是多个常量,它会按序匹配
    function returnTest6() returns(uint mul,uint a)
    {
        return (60,30);
    }
}

变量的生命周期及作用域

pragma solidity >=0.4.12 <0.6.0;

contract valueCopy
{
    uint public a=100;
    uint b=200;
    //因为这个函数中的a和public上的a不是一个地址,所以改的并不是public上的a.
    function test() returns(uint)
    {
        uint a=5;
        a=700;
        return a;
    }
    //如果想要更改public上a的值
     function changeIt() 
    {
        a=700;
    }
   // function test1(uint a) returns(uint)
   // {
     //   uint a=5;//如果传参的地方已经声明了,又在函数体中声明是不对的,任何地方都不能。
     //   a=700;
     //   return a;
   // }
    
}

废弃的constant静态修饰

在这里插入图片描述

构造函数

构造函数可以有参数
在这里插入图片描述
新的版本使用constructor替换掉原来的构造函数命名方式
在这里插入图片描述

函数modifire

1.modifire:在函数前调用modifire内的命令,为true时才能执行函数。
在这里插入图片描述
2.判断此地址是否之前注册过,注册过就不能再注册了
在这里插入图片描述
3.modifire可以传参
在这里插入图片描述
4.多个modifire
在这里插入图片描述

继承

1.普通继承
在这里插入图片描述
2.多继承
在这里插入图片描述
3.public, internal, external,private区别

在这里插入图片描述
4.private不能被继承
在这里插入图片描述

internal权限

只能在函数内部调用或者继承合约内部使用,不能够在合约外部使用
在这里插入图片描述

external权限修饰详解

1.不能在合约内部调用,继承的合约内部也不能调用
2.在合约内部调用要用this.函数名()
在这里插入图片描述
3.一般是在另一个合约内调用
在这里插入图片描述

函数小结

在这里插入图片描述

全局变量自动getter函数

getter函数默认生成

在这里插入图片描述

mapping函数特殊

在这里插入图片描述

超级复杂的getter函数

套mapping
在这里插入图片描述
在这里插入图片描述

继承中函数的重载

当父合约和子合约属性和函数相同时,子合约会覆盖掉父合约的属性和函数
在这里插入图片描述

基因杂交–多重继承

1.可以继承多个父类
2.按照继承的对象顺序,后一个对象会覆盖前一个对象的相同属性或函数,例如:is father,mother,mother就会覆盖掉father.
3.如果儿子有和父类相同的属性,就会覆盖父类的属性
在这里插入图片描述

合约的销毁

用selfdestruct(合约部署者地址);进行销毁
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值