《道德经》第一章最后一句“此两者同出而异名,同谓之玄,玄之又玄,众妙之门。”Solidity的函数重载,虽然输入的参数不一样,但相同的函数名阐释着“有”与“无”本归同一的奥妙。还要注意的是solidity有关address函数重载参数的限制。
实验目的
理解Solidity的函数重载与重载函数参数的特殊限制。
实验要求
1. 观察第一组与第二组的代码,分析每组同名函数传入的参数在类型或数量上有什么不同。
2. 思考testhello4与TestHello4函数哪个会报错?将你认为的函数填写于注释的问题3里。然后编译下面的代码,查看结果。思考函数为什么会报错,将原因写下来:
3. 将要求2里报错的函数注释掉。调用testHello4函数,思考返回的a值会是什么?将答案写于注释的问题4里。查看a的返回值,看看你的答案是否正确。
4. 请将testHello4函数里面hello4传入的值修改为任意的uint160值(地址值除外,如:520786028573371803640530888255888666801131675077)。再次编译、部署,调用testHello4函数,查看a的返回值。思考a的值为什么会变化,有关重载函数参数为address类型的注意点是什么?
以下是本次实验所使用到的测试代码,请使用remix编辑器完成该实验
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Test1 {
// 第1组 函数hello1传入的参数什么不同? (1)
function hello1(uint) public {}
function hello1(string memory) public {}
// 第2组 函数hello2传入的参数什么不同? (2)
function hello2(uint,uint8) public {}
function hello2(uint) public {}
// 第3组
function hello3(uint) public {}
function hello3(uint8) public {}
// 第4组
uint8 public a = 10;
function hello4(address) public {
a = 10;
}
function hello4(uint160) public {
a = 20;
}
// testhello3与TestHello3函数哪个会报错? (3)
function testHello3() public {
hello3(100);
}
function TestHello3() public {
hello3(256);
}
// 调用testHello4函数后,a的返回值会是什么? (4)
function testHello4() public returns(uint){
hello4(0x5B38Da6a701c568545dCfcB03FcB875f56beddC4);
return a;
}
}
下面是本次实验所配套的视频教程:
