solidity合约面向对象
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合约面向对象的更多相关文章
- Solidity合约中的整数溢出漏洞事件
事件 2018年4月23日 BEC 一夜被偷64亿 2018年4月25日 SMT 再爆类似漏洞,火币Pro和OKEx相继暂停了SMT交易 2018年4月25日 BEC.SMT现重大漏洞,这8个智能合约 ...
- Solidity智能合约面向对象编程(一、类的创建)
Solidity编写智能合约 1 pragma solidity ^0.4.4;//版本声明 ^代表向上兼容 pragma代表版本声明 solidity 代表开发语言 2 //定义类 3 contra ...
- Solidity合约间的调用 -Solidity通过合约转ERC20代币
Solidity通过合约转ERC20代币 ERC20代币并不能像Ether一样使用sendTo.transfer(amt)来转账,ERC20代币只能通过token中定义的transfer方法来转账 ...
- Solidity合约间的调用-1
当调用其它合约的函数时,可以通过选项.value(),和.gas()来分别指定,要发送的ether量(以wei为单位),和gas值. pragma solidity ^; contract InfoF ...
- Solidity合约记录——(三)如何在合约中对操作进行权限控制
合约中一般会有多种针对不同数据的操作:例如对于存证内容的增加.更新及查询,若不进行一套符合要求的权限控制,事实上整个合约在真实环境下是没有多少使用价值的.那么应当如何对合约的权限进行划分?我们针对So ...
- Solidity合约记录——(一)如何寻找以太坊真实Solidity源码
在自主学习Solidity智能合约的过程中,第一份入手资料无疑是官方文档.感谢前辈们还能提供出文档的中文翻译,作为我入门的第一手资料:文末附上有用的学习链接{持续更新中} 阅读完基础文档同时上手合约后 ...
- Solidity合约:玉米生产溯源
实现思路: 首先用地址与每个结构进行映射,将关键信息储存在结构体中:或者将关键信息在外部通过json储存,内部储存对应的hash值: 使用issue函数表示:玉米地中收获足够数量的玉米并进行记录: 使 ...
- solidity 合约间调用以及参数传递
在 以太坊中合约间是可以相互调用,并且正常进行参数传递以及返回值处理. contract1.sol pragma solidity ^0.4.0; contract Test1 { uint256 p ...
- solidity合约详解
Solidity 是一个面向合约的高级语言,其语法类似于JavaScript .是运行在以太坊虚拟机中的代码.这里我们用的是remix编译环境.是一个在线的编译环境.地址为http://remix.e ...
随机推荐
- PLSQL导出语句的查询结果
不需要把全部结果都展示出来
- 线段树(压位)luogu P1558色板游戏
题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, ... L. 现在色板上只 ...
- SDUT OJ 数据结构实验之二叉树八:(中序后序)求二叉树的深度
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...
- sharding-jdbc数据分片配置
数据分片 不使用Spring 引入Maven依赖 <dependency> <groupId>org.apache.shardingsphere</groupId> ...
- python学习之路---day23--模块
模块基本小结if __name__ == '__main__':一:import 引入模块模块:是一个包含python定义和声明的文件,文件名就是模块名字加上.py后缀,所有的py文件都可以看成是一个 ...
- Wannafly挑战赛14 - E 并查集维护线性基区间
给一个1-base数组{a},有N次操作,每次操作会使一个位置无效.一个区间的权值定义为这个区间里选出一些数的异或和的最大值.求在每次操作前,所有不包含无效位置的区间的权值的最大值. 线性基删除不知道 ...
- Tyvj - 1305 单调队列优化dp
今天有点头痛就不写具体细节了,贴完走人 #include<iostream> #include<algorithm> #include<cstdio> #inclu ...
- 1149 Dangerous Goods Packaging (25 分)
When shipping goods with containers, we have to be careful not to pack some incompatible goods into ...
- Angular 怎么在加载中加入 Loading 提示框
[转自] http://zhidao.baidu.com/link?url=MX9eSRkQbBC8zrjsCi-t_PsftVRSIjiaUTHhdp6eDiZ0IqaZehSCo3n7fFXWyP ...
- c#判断一段代码运行所花费的时间
//定义一个时间对象 System.Diagnostics.Stopwatch oTime = new System.Diagnostics.Stopwatch(); oTime.Start(); / ...