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. 安卓手机传递文件到Windows系统电脑

    1.需求说明 安卓手机传递文件到Windows系统电脑上不太方便,传递文件的原理花样太多.这里介绍纯净原生的蓝牙文件传递方式. 2.操作步骤 2.1 打开侧边栏面板 2.2 打开蓝牙,右键转至设置 2 ...

  2. kali linux之netcat

    网络工具中的瑞士军刀----体积小,功能强大 侦听模式/传输模式 telnet/获取banner信息 传输文本信息,文件,目录 加密传输文件,远程控制/木马,加密所有流量(来做远程控制是非常理想的选择 ...

  3. k8s(未完待续)

    K8s简介Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展. 使用Kubernetes可以  自动化容器的部署和复制  随时扩展或收缩容器规模  将容器 ...

  4. 【bzoj3309】DZY Loves Math 莫比乌斯反演+线性筛

    Description 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0. 给定正整数a,b, ...

  5. python中文件路径的问题

    慎用中文路径!慎重中文路径!!慎用中文路径!!! good = np.loadtxt(u'D:/feiq/feiq/Recv Files/Recv Files/LOS 数据集/good_user2', ...

  6. php Tp5下mysql的增删改查

    // 增 public function insert(){ $data = array( "username"=>"user121", "pa ...

  7. Sublime的一些问题记录

    1.默认的中文字体显示异常(参考:关于最新版的Sublime Text 3中默认的中文字体样式显示异常的问题) 1. 选择Perferences(首选项)--> settings(设置) 2. ...

  8. BZOJ4627 权值线段树

    4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1204  Solved: 475[Submit][St ...

  9. 2.2、Softmax Regression算法实践

    Softmax Regression算法实践 有了上篇博客的理论知识,我们可以利用实现好的函数,来构建Softmax Regression分类器,在训练分类器的过程中,我们使用多分类数据作为训练数据: ...

  10. gevent 传参, 中文编码

    #coding=utf-8 import os from gevent import monkey,pool monkey.patch_all() import gevent import time ...