solidity 函数的访问权限
solidity 函数分为四种访问权限:
private : 私有函数。内部正常访问,外部无法访问,子类无法继承。
internal : 内部函数。内部正常访问,外部无法访问,子类可继承。
public : 公共函数。内部正常访问,外部正常访问,子类可继承。
external : 外部函数。内部不能访问,外部正常访问,子类可继承。
solidity 函数中 pure 、 view 、 constant 的区别
只有当函数有返回值的情况下,才需要使用 pure 、 view 、 constant
pure : 当函数返回值为自变量而非变量时,使用 pure
view : 当函数返回值为全局变量或属性时,使用 view
constant : 可以理解为 view 的旧版本,与 view 是等价的
如果一个函数有返回值,函数中正常来讲需要有 pure 、 view 或 constant 关键字,如果没有,在调用函数的过程中,需要主动去调用底层的call方法。
注: 如果一个函数中带了关键字 view 或 constant ,就不能修改状态变量的值。但凡是是带了这两个关键字,区块链就默认只是向区块链读取数据,读取数据不需要花gas,但是不花gas就不可能修改状态变量的值。写入数据或者是修改状态变量的值都需要花费gas。
状态变量、函数的权限
public
public类型的状态变量和函数的权限最大,可供外部、子合约、合约内部访问
internal
internal类型的状态变量可供外部和子合约调用。
internal类型的函数和private类型的函数一样,智能合约自己内部调用,它和其他语言中的protected不完全一样
private
我们在person合约中尝试调用_name状态变量,你会发现,编译没法通过。
重写
子合约可以将父合约的public类型的函数,只能继承public类型的函数,只能继承public类型的函数,只能继承public类型的函数,我们可以直接调用继承过来的函数,当然,我们还可以对继承过来的函数进行重写。
构造器(智能合约)
每个合约都允许存在构造器,构造器是与合约同名的一个特殊函数,有且只能有一个,不允许重载。构造器将在合约创建时,执行一次,用于初始化一些配置。
pragma solidity ^0.4.0;
contract ContractConstructor{
uint public counter;
function ContractConstructor(){
counter++;
}
}