1. 属性【状态变量】的访问权限

public  internal【合约属性默认的权限】  private

  说明:属性默认访问全向为internal,internal和private类型的属性,外部是访问不到的。

当属性为public时,会自动生成一个和属性同名并且返回值为当前属性的get方法。

  例如:

uint public _age;

会自动生成一个:

function _age() constant  returns (uint){
return _age;
}

  如果自己定义了_age方法,会覆盖原来的方法:

internal:

public:

2.行为【合约的方法】的访问权限

访问权限有:public internal private

  方法默认为public类型。

3.继承

this指针只能访问public类型的成员,只有是public类型,才能通过合约地址访问【合约内部的this,就是当前合约的地址】,在合约内部如果要访问合约的internal和private,直接访问即可,不要使用this。

  继承使用关键字is:

pragma solidity ^0.4.;

contract Animal{
uint _weight;
uint public _age;
uint private _name; function test() constant { }
} contract Dog is Animal{ }

  对于public类型的成员,子类直接继承过来;

  对于internal类型的成员,子类在内部可以访问;

  对于private类型的成员,子类不能直接访问;

多继承:is Animal, Eat

pragma solidity ^0.4.;

contract Animal{
uint _weight;
uint public _age;
uint private _name; function test() constant returns (uint){
return ;
}
} contract Eat{
function eat() constant returns(string){
return "eat";
}
} contract Dog is Animal,Eat{ function test() constant returns (uint){
return ;
} function getWeight() constant returns (uint){
return _weight;
} }

4.值类型,引用类型

值类型有:

  • Boolean
  • Integer
  • Address
  • fixed byte array【定长字节数组】
  • rational and integer literals ,string linterals【有理数和整形】
  • enum【枚举】
  • function【函数】

引用类型有:

  • 不定长字节数组
  • 字符串
  • 数组
  • 结构体

  函数参数的默认引用类型为memory,即不会修改实参的值。当修改为storage时,可以修改引用类型的变量的值,如果函数使用了storage,那么只能是internal【只能内部调用】.

  对于字符串,只能修改单个字符。bytes(name)[0] = 'L'   【索引不能出界】

pragma solidity ^0.4.;

contract Person{
string public _name;
function Person(string name){
_name=name;
} function f(){
modify(_name);
} function modify(string storage name) internal {
bytes(name)[] = 'A';
} function name() constant returns (string){
return _name;
}
}

solidity合约面向对象的更多相关文章

  1. Solidity合约中的整数溢出漏洞事件

    事件 2018年4月23日 BEC 一夜被偷64亿 2018年4月25日 SMT 再爆类似漏洞,火币Pro和OKEx相继暂停了SMT交易 2018年4月25日 BEC.SMT现重大漏洞,这8个智能合约 ...

  2. Solidity智能合约面向对象编程(一、类的创建)

    Solidity编写智能合约 1 pragma solidity ^0.4.4;//版本声明 ^代表向上兼容 pragma代表版本声明 solidity 代表开发语言 2 //定义类 3 contra ...

  3. Solidity合约间的调用 -Solidity通过合约转ERC20代币

    Solidity通过合约转ERC20代币   ERC20代币并不能像Ether一样使用sendTo.transfer(amt)来转账,ERC20代币只能通过token中定义的transfer方法来转账 ...

  4. Solidity合约间的调用-1

    当调用其它合约的函数时,可以通过选项.value(),和.gas()来分别指定,要发送的ether量(以wei为单位),和gas值. pragma solidity ^; contract InfoF ...

  5. Solidity合约记录——(三)如何在合约中对操作进行权限控制

    合约中一般会有多种针对不同数据的操作:例如对于存证内容的增加.更新及查询,若不进行一套符合要求的权限控制,事实上整个合约在真实环境下是没有多少使用价值的.那么应当如何对合约的权限进行划分?我们针对So ...

  6. Solidity合约记录——(一)如何寻找以太坊真实Solidity源码

    在自主学习Solidity智能合约的过程中,第一份入手资料无疑是官方文档.感谢前辈们还能提供出文档的中文翻译,作为我入门的第一手资料:文末附上有用的学习链接{持续更新中} 阅读完基础文档同时上手合约后 ...

  7. Solidity合约:玉米生产溯源

    实现思路: 首先用地址与每个结构进行映射,将关键信息储存在结构体中:或者将关键信息在外部通过json储存,内部储存对应的hash值: 使用issue函数表示:玉米地中收获足够数量的玉米并进行记录: 使 ...

  8. solidity 合约间调用以及参数传递

    在 以太坊中合约间是可以相互调用,并且正常进行参数传递以及返回值处理. contract1.sol pragma solidity ^0.4.0; contract Test1 { uint256 p ...

  9. solidity合约详解

    Solidity 是一个面向合约的高级语言,其语法类似于JavaScript .是运行在以太坊虚拟机中的代码.这里我们用的是remix编译环境.是一个在线的编译环境.地址为http://remix.e ...

随机推荐

  1. PLSQL导出语句的查询结果

    不需要把全部结果都展示出来

  2. 线段树(压位)luogu P1558色板游戏

    题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, ... L. 现在色板上只 ...

  3. SDUT OJ 数据结构实验之二叉树八:(中序后序)求二叉树的深度

    数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...

  4. sharding-jdbc数据分片配置

    数据分片 不使用Spring 引入Maven依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> ...

  5. python学习之路---day23--模块

    模块基本小结if __name__ == '__main__':一:import 引入模块模块:是一个包含python定义和声明的文件,文件名就是模块名字加上.py后缀,所有的py文件都可以看成是一个 ...

  6. Wannafly挑战赛14 - E 并查集维护线性基区间

    给一个1-base数组{a},有N次操作,每次操作会使一个位置无效.一个区间的权值定义为这个区间里选出一些数的异或和的最大值.求在每次操作前,所有不包含无效位置的区间的权值的最大值. 线性基删除不知道 ...

  7. Tyvj - 1305 单调队列优化dp

    今天有点头痛就不写具体细节了,贴完走人 #include<iostream> #include<algorithm> #include<cstdio> #inclu ...

  8. 1149 Dangerous Goods Packaging (25 分)

    When shipping goods with containers, we have to be careful not to pack some incompatible goods into ...

  9. Angular 怎么在加载中加入 Loading 提示框

    [转自] http://zhidao.baidu.com/link?url=MX9eSRkQbBC8zrjsCi-t_PsftVRSIjiaUTHhdp6eDiZ0IqaZehSCo3n7fFXWyP ...

  10. c#判断一段代码运行所花费的时间

    //定义一个时间对象 System.Diagnostics.Stopwatch oTime = new System.Diagnostics.Stopwatch(); oTime.Start(); / ...