《道德经》第一章最后一句“此两者同出而异名,同谓之玄,玄之又玄,众妙之门。”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;
    }
}

下面是本次实验所配套的视频教程: