zoukankan      html  css  js  c++  java
  • 【Solidity】学习(3)

    函数

    重定义

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

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

  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/lhw-/p/10656842.html
Copyright © 2011-2022 走看看