函数的重载

函数重载是指函数命名相同的函数,但需要满足以下两个条件之一

  1. 函数入参的数量不同
  2. 函数入参的类型不同

注意:address类型 与uint160 类型相同,若重载函数参数是两个类型则会报错

pragma solidity ^0.4.0;//函数的重载
//1 函数的名字相同  2函数的 参数(类型 数量)不同  3.返回的值类型不同不能被重载
//注意uint160 与address
contract chongzai{function fun(uint num) view public returns(uint){}function fun(uint8 num) view public returns(uint){}uint public a = 1;function test1(uint num){a=100;}function test1(uint8 num){a=200;}function test(){test1(288);}
}

函数入参

函数入参有两种方式

  1. 按照顺序依次向函数传入参数
  2. 将参数用对象的方式传入,不用按照顺序
pragma solidity ^0.4.0;
contract funcParam{uint public num;string public name;function setParam(uint _num,string _name) view public{num = _num;name = _name;}function test(){setParam(10,"waston");   }function test2(){setParam({_name:"万事通",_num:100});}
}

函数的返回值

  1. 函数返回值声明中可以定义变量
  2. 函数可以返回多个值
  3. 函数的返回值可以是形参
  4. 可以在函数返回值进行计算
pragma solidity ^0.4.0;
contract funReturn{function returnTest() view public returns(uint mul){uint a = 10;return a;}function returnTest2() view public returns(uint mul){mul=100;}function returnTest3() view public returns(uint mul){mul=100;uint a = 10;return a;}function returnTest4(uint a,uint b) view public returns(uint add,uint mul){add = a+b;mul=a*b;}function returnTest5(uint a,uint b) view public returns(uint add,uint mul){return (a+b,a*b);}function returnTest7(uint a,uint b) view public returns(uint add,uint mul){return (10,20);}function returnTest8(uint a,uint b) view public returns(uint a1,uint a2){return (b,a);}}

modifire

pragma solidity ^0.4.0;
contract modifireTest{address public owner;uint public num=0;//把合约的部署着地址存储再owner变量中constructor (){owner = msg.sender;}//定义modifire  modifier onlyOwner{//判断require(msg.sender==owner);_;  //动态添加} //附加上了modifire  先执行了 require(msg.sender==owner);  判断了我们合约的调用者是否等于合约的拥有者  如果成立则会执行下面的语句//否则就会回滚报错function changeIt(uint _num) onlyOwner{num = _num;}
}
pragma solidity ^0.4.0;
contract mappingTest{//账户IDmapping(address =>uint) idMapping;mapping(uint => string) nameMapping;uint public sum= 0;
//用户只能注册一次modifier control{require(idMapping[msg.sender]==0);_;}function register(string name)  control{//获取到当前合约的调用者address account = msg.sender;sum++;//将合约的调用者的地址与注册总量id联系在一起idMapping[account]=sum;//将用户id与用户注册的名字绑定在一起nameMapping[sum] =name;}//通过地址获取到idfunction getIdByAddress(address are) view public returns(uint){return idMapping[are];}//通过id获取到namefunction getNameById(uint id) view public returns(string){return nameMapping[id];}
}
pragma solidity ^0.4.0;
contract modifierTest2{uint public level = 9;string public name = "waston";uint public DNA;//函数的modifire 可以有参数modifier contrlLevel(uint needlevel){require(level>needlevel);_;}//使用modifire  增加代码的重用性 和扩展性function changeName()  contrlLevel(2){name="万事通";}function changeDna()  contrlLevel(10){DNA=999;}}

modifire 执行顺序

pragma solidity ^0.4.0;
//多重modifire
contract mulModifire{uint public a = 0;modifier mod1{a = 1;_;a=2;}modifier mod2{a=3;_;a=4;}//modifire 的执行顺序a=1   a=100 a=2 //函数中的替代了modifire中的_;function test1() mod1{a=100;}   //执行顺序  a=1 a=3 a=100 a=4 a=2function test() mod1 mod2{a=100;}
}

函数的继承

pragma solidity ^0.4.0;contract grandFather{uint public gudong=200;function zhongdi() public returns (string){return "zhongdi";}
}contract father is grandFather{uint public money =10000;function dahan() public returns(string){return "dahan"; }}
//合约能够被连续的继承
//son这个合约继承了father这个合约
contract son is father{function getMoney() returns (uint){//继承了父亲money这个属性return money; }//继承了父亲dahan 这个函数  行为function test(){dahan();}//继承了爷爷种地这个函数 行为  连续继承function test2(){zhongdi();}function getGudong() returns(uint){return gudong;}
}
pragma solidity ^0.4.0;
//1.如果属性不加上任何的修饰符 是可以被继承的
//2.加上了public属性后也是可以被继承的
//3 internal属性仍然是可以被继承的
//4 external编译报错 没有修饰符
//5 private 编译报错 因为private代表只有父类有这个属性不能被继承
// internal修饰的函数只能够在合约的内部或者继承的合约的内部使用  但是不能够在合约的外部使用
// external修饰的函函数不能够在内部调用   也不能在继承的合约内部调佣
contract father {uint money=10000;// uint public money=10000;// uint external money=10000;// uint private money = 10000;function dahan() external  returns (string){return "dahan";}//间接的在内部调用只能使用this指针function  dahanTest() public view {this.dahan();}
}
//external修饰的函数调用的第二种方式在另一个合约内创建或引用合约的“地址”来使用
contract externalTest{father f = new father();function externalTestIt() returns(string){return  f.dahan();}}
contract son is father{// function getMoney() public view returns (uint)// {//     return money;// }// function test() public view returns (string){//     return dahan();// }
}

函数小结

1 private不能够被继承 也不能在外部被调用  可以在内部被调用(所有的修饰符都这个)
2 internal 不能在外部被调用  可以被继承
3 external不能够在内部被调用 只能够在外部调用 可以被继承  如果强行调用  通过“地址。”
4 public 权限最大 可以在外部内部调用可以被继承
5 pure 不会读取全局变量 更不会修改全局变量  一个固定的输入  就会有一个固定的输出
6 constant 在函数中  和view相同 ,在全局变量中  致用户bytes1-bytes32 uint int string  代表数据不能被修改
7 view  只读取全局变量的值 不能修改他 不消耗gas
8 payable转账的时候必须要加的关键字
9 命名参数 {value:2,name:'wastoner'}
10 函数可以有多个返回值

solidity学习记录4 (函数的初步入门)相关推荐

  1. Solidity学习记录——第二章

    Solidity学习记录 第一章 创建生产僵尸的工厂 第二章 设置僵尸的攻击功能 第三章 编写DAPP所需的基础理论 第四章 完善僵尸功能 第五章 ERC721 标准和加密资产 文章目录 Solidi ...

  2. Solidity学习记录——第四章

    Solidity学习记录 第一章 创建生产僵尸的工厂 第二章 设置僵尸的攻击功能 第三章 编写DAPP所需的基础理论 第四章 完善僵尸功能 第五章 ERC721 标准和加密资产 文章目录 Solidi ...

  3. python大神的成长之路_Python大神成长之路: 第三次学习记录 集合 函数 装饰 re...

    学习记录day03 字符串可以直接切片,But字符串不可修改 字符串修改:生成了一个新的字符串 LIst修改,在原基础上修改(原内存上) 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重, ...

  4. 【学习记录】Python零基础入门(五)

    第五章 Python零基础入门之条件.循环及其他语句 本人自学的主要教材为Magnus Lie Hetland的Beginning Python:From Novice to Professional ...

  5. solidity 学习记录1

    开发工具 remix Remix - Ethereum IDE 需要下载的插件 solidity文档 Units and Globally Available Variables - Solidity ...

  6. JavaScript学习记录 (三) 函数和对象

    1.函数 使用 function 关键字来声明函数 函数的命名规则和变量一样 JS没有函数签名,所以没有函数重载 JS函数中的所有参数都是值传递:不能通过引用传递 // 定义函数 function t ...

  7. MySQL学习记录—Date函数系列

    文章目录 Date数据类型 MySQL中最重要的日期函数 MySQL日期格式化函数: date_format() MySQL日期减法函数 date_sub() MySQL日期加法函数 date_add ...

  8. 【学习记录】python matplotlib 自学入门(随缘更新)

    貌似基础 add_subplot 前两个参数表示把面板划分成怎样的形状(几行几列)第三个参数表示图在面板中的位置 import matplotlib.pyplot as plt fig =plt.fi ...

  9. Opencv 入门篇学习记录(图片)

    title: Opencv 入门篇学习记录(图片) Opencv 入门篇学习记录(图片) 前言 很早以前就接触Python了,大学的时候还自学了一段时间去做了课设,写了一些最速梯度下降法.黄金分割法. ...

最新文章

  1. 安装好了java7怎么打开,Windows怎么安装JDK1.7 JDK1.7怎么安装图解
  2. 视觉SLAM总结——LSD SLAM中关键知识点总结
  3. WinForm编程数据视图之DataGridView浅析
  4. 安装了一次Linux,哈哈
  5. 周至四中计算机老师,周至县第四中学顺利承办周至县 “教育信息化技术与教学课堂深度融合交流研讨会”...
  6. 2019年第一批重点作品版权保护预警名单公布 都是贺岁档
  7. ElasticSearch7.2只能用localhost访问但不能用IP地址访问---ElasticSearch工作笔记027
  8. Python类、模块、包的概念及区别
  9. 解决Android Studio卡在Gradle:Resolve dependecies ‘app:_debugCompile‘问题
  10. IA64与x64的区别
  11. 成都Uber优步司机奖励政策(3月1日)
  12. 生活娱乐 长的最奇怪的东西——骡耳犰狳
  13. Mybatis开启日志
  14. 【两万字总结】Spark安装部署与入门
  15. ajax401错误,使用jqueryajax捕获401未经授权的http响应
  16. Ubuntu系统垃圾清理、Debian系统垃圾清理
  17. 汇编语言编程题总结(特别适用河北专接本)
  18. python-笔记(四)函数
  19. 【历史上的今天】6 月 19 日:iPhone 3GS 上市;帕斯卡诞生;《反恐精英》开始测试
  20. python怎样使用各个日期赤纬_天文数据处理笔记之python(3)

热门文章

  1. 曾经的豪言壮语,如今的喟然长叹
  2. Docker Desktop stopped 问题解决
  3. 江苏二本计算机科学与技术好的学校排名,江苏最好的二本学校,2021年江苏二本学校排名前十名单公布...
  4. 详解slab机制(1) slab是什么
  5. dlib安装与imglab制作数据集
  6. Brupsuit 暴力破解账户密码
  7. php有道,PHP调用有道词典翻译API实现通译功能及代码
  8. STM32驱动DHT11
  9. redis执行lua脚本
  10. 地理、Mercator(墨卡托)、UTM 之间关系