- 1
- 0
- 约4.32万字
- 约 42页
- 2026-03-13 发布于广东
- 举报
4.2-4
//contracts.sol
pragmasolidity0.4.19;
//Thisisasinglelinecommentinsolidity
/*Thisisamulti-linecomment
Insolidity.UsethiswhenmultipleconsecutivelinesShouldbecommentedasawhole*/
contractfirstContract{}
contractsecondContract{}
1fbrarystringLibrary{}
librarymathLibrary{}
interfaceIBank{}
interfaceIAccount{}
4.2.1-2
//定义结构体
struct{
stringname;
uintage;
boolisAdult;
uint[]ID;
}
创建结构体实例的语法如下。无需明确使用new关键字。new关键字只能用于创建合约或数组的实例,如下列代码所示:
people=myStruct(“Sam”,18,true,newuint[](3));
可以在函数中创建多个结构体实例。结构体可以包含数组和映射变量,而映射和数组可以存储结构体类型的值。
以下是一个结构体使用的示例:
pragmasolidity=0.6.00.9.0;
//定义的新类型包含两个属性。
//在合约外部声明结构体可以使其被多个合约共享。在这里,这并不是真正需要的。
structFunder{
addressaddr;
uintamount;
}
contractCrowdFunding{
//也可以在合约内部定义结构体,这使得它们仅在此合约和衍生合约中可见。
structCampaign{
addressbeneficiary;
uintfundingGoal;
uintnumFunders;
uintamount;
mapping(uint=Funder)funders;
}
uintnumCampaigns;
mapping(uint=Campaign)campaigns;
functionnewCampaign(addresspayablebeneficiary,uintgoal)publicreturns(uintcampaignID){
campaignID=numCampaigns++;//campaignID作为一个变量返回
//不能使用campaigns[campaignID]=Campaign(beneficiary,goal,0,0)
//因为RHS(righthandside)会创建一个包含映射的内存结构体Campaign
Campaignstoragec=campaigns[campaignID];
c.beneficiary=beneficiary;
c.fundingGoal=goal;
}
functioncontribute(uintcampaignID)publicpayable{
Campaignstoragec=campaigns[campaignID];
//以给定的值初始化,创建一个新的临时memory结构体,
//并将其拷贝到storage中。
//注意你也可以使用Funder(msg.sender,msg.value)来初始化。
c.funders[c.numFunders++]=Funder({addr:msg.sender,amount:msg.value});
c.amount+=msg.value;
}
functioncheckGoalReached(uintcampaignID)publicreturns(boolreached){
Campaignstoragec=campaigns[campaignID];
if(c.amountc.fundingGoal)
returnfalse;
原创力文档

文档评论(0)