以太坊solidity基础1

我的第一个合约

pragma solidity ^0.4.5;

contract MyFirstContract {
    uint _age;
    address _owner;

    function MyFirstContract() {
        _owner=msg.sender;
    }

    function set_age(uint age) {
        _age=age;
    }
    function cat_age() constant returns (uint){
        return _age;
    }
    function Kill() {
        if (msg.sender==_owner){
            selfdestruct(_owner);
        }
    }
}

属性、方法的三种访问权限和继承以及合约的多继承

pragma solidity ^0.4.5;

contract pcl_all{
    uint private _pcl1;     //只有private的属性不会被继承
    uint public _pcl2;      //public会默认创建一个可被调用的get方法,方法与属性名同名。
    uint internal _pcl3;

    function pcl_all() public{
        _pcl1=1;
        _pcl2=2;
        _pcl3=3;
    }

    function pcl1() constant public returns (uint){
        return 1;
    }

    function _pcl2() constant public returns (uint){
        return 22222;
    }

    function pcl3() constant internal returns (uint){
        return 3;
    }
}

contract pcl{
    uint public facker_is_my_ouxiang;
    function pcl(){
        facker_is_my_ouxiang=11111;
    }
}


contract pcl_1 is pcl_all,pcl{
    function test() constant returns(uint){
        return _pcl2+_pcl3;
    }
}

合约中函数的重写

pragma solidity ^0.4.5;

contract pcl{
    address _owner;

    function pcl() {
        _owner=msg.sender;
    }
    function send_add() constant returns (address) {
        return msg.sender;
    }
}


contract pcl2 is pcl{
    function send_add() constant returns (address) {
        return _owner;
    }
}

值传递和引用传递

pragma solidity ^0.4.5;

contract pcl{
    string  _name;
    
    function pcl(string name){      //定义一个和合约一样名字的函数就是初始化class。这时候传入name
        _name=name;
    }
    
    function diaoyong(){            //写一个函数用来调用值传递和引用传递的例子。
        // yinyongchuandi(_name);   //当把引用传递这个注释掉的时候,_name的值是不会变得。因为传的是值,而不是指针。
        zhichuandi(_name);          //但是当引用传递时,就相当于把_name的指针传了过去,再操作name的时候就是对_name进行操作
    }
    
    function yinyongchuandi(string storage name) internal constant{
        bytes(name)[0]='a';         //当使用storage时就不能对name进行增删,因为唯一的内存大小已经被生成了。(2020.4.5回来修改,string是特殊的动态大小字节数组,虽然通过bytes能对他的某个索引进行更改,但是不能增加和删除,也不能通过length对他长度进行更改。只有通过new bytes(n)声明动态字节数组。)(再更正,使用bytes对string进行转换后可以进行索引修改操作,也可以对length进行赋值。但是首先要对函数取消constant方法,因为constant是函数不对区块进行操作(如get方法)的时候用的。)
    }
    
    function zhichuandi(string memory name) internal constant{
        _name='123';        //
    }
    
    function get_name() constant returns (string){
        return _name;
    }
    
}

中文文档:Solidity

你可能感兴趣的:(区块链学习-以太坊)