我的第一个合约
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