国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

以太坊智能合約開發(fā):Solidity語言中的構(gòu)造函數(shù)

這篇具有很好參考價值的文章主要介紹了以太坊智能合約開發(fā):Solidity語言中的構(gòu)造函數(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Solidity語言中關(guān)于構(gòu)造函數(shù)的定義:

  • 構(gòu)造函數(shù)是使用 constructor 關(guān)鍵字聲明的一個可選函數(shù);
  • 構(gòu)造函數(shù)只在合約部署時調(diào)用一次,并用于初始化合約的狀態(tài)變量;
  • 如果沒有顯式定義的構(gòu)造函數(shù),則由編譯器創(chuàng)建默認(rèn)構(gòu)造函數(shù)。

聲明語法

構(gòu)造函數(shù)聲明語法如下:

constructor(<paramslist>) <Access Modifier> {
	// todo
} 

其中:

  • **constructor:**聲明構(gòu)造函數(shù)的關(guān)鍵字;
  • **<paramslist>:**構(gòu)造函數(shù)的參數(shù)列表,非必須;
  • **<Access Modifier>:**訪問修飾符(即函數(shù)可見性)。構(gòu)造函數(shù)的可見性可以是內(nèi)部的(internal)也可以是公共的(public),內(nèi)部構(gòu)造函數(shù)必須將合約標(biāo)記為抽象合約(在合約前添加abstract關(guān)鍵字)。抽象合約的參數(shù)不能被外部賦值,而僅能通過派生合約賦值。新的編譯器版本無需指定訪問修飾符。

例如,下面的合約聲明了一個構(gòu)造函數(shù),用于對狀態(tài)變量進(jìn)行初始化。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

// 構(gòu)造函數(shù)
contract Simple {
    string str;
             
    // 聲明構(gòu)造函數(shù),并初始化狀態(tài)變量
    constructor() {                 
        str = "hello simple";
    }
    
    // 定義一個函數(shù)返回狀態(tài)變量的值
    function getValue() public view returns(string memory) {
        return str;
    }
}

繼承的構(gòu)造函數(shù)

如果父合約沒有定義構(gòu)造函數(shù),則調(diào)用默認(rèn)構(gòu)造函數(shù),如果在父合約中定義了構(gòu)造函數(shù),并且有一些參數(shù),則子合約需要提供所有參數(shù)。有兩種方法來調(diào)用父合約的構(gòu)造函數(shù):

直接初始化

**例子:**在下面的例子中,使用直接初始化方法來初始化父類的構(gòu)造函數(shù)。

/ SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

// 基類
contract Base {
    uint data;
             
    // 構(gòu)造函數(shù)
    constructor(uint _data) {
        data = _data;  
    }
}

// 繼承合約(直接初始化)
contract Derived is Base(2) {
    // 構(gòu)造函數(shù)
    // constructor() {}

    // 定義一個函數(shù)訪問父合約的狀態(tài)變量
    function getData() external view returns(uint) {
        uint result = data ** 2;
        return result;
    }
}

// 調(diào)用合約
contract Caller {
    // 創(chuàng)建子合約對象
    Derived c = new Derived();

    // 通過子合約對象訪問父合約和子合約的函數(shù)
    function getResult() public view returns(uint) {
        return c.getData();
    }
}

輸出: 我們在Remix中編譯、部署和運行這個合約例子,執(zhí)行結(jié)果如下圖:
solidity中構(gòu)造函數(shù)的可見性是,區(qū)塊鏈,1024程序員節(jié),智能合約,區(qū)塊鏈,以太坊

間接初始化

在下面的例子中,使用間接初始化方法來初始化父類的構(gòu)造函數(shù)。

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

// 基類
contract Base {
    string str;
             
    // 構(gòu)造函數(shù)
    constructor(string memory _str) {
        str = _str;  
    }
}

// 繼承合約(間接初始化)
contract Derived is Base {
    // 構(gòu)造函數(shù)
    constructor(string memory _info) Base(_info) {}

    // 定義一個函數(shù)訪問父合約的狀態(tài)變量
    function getStr() external view returns(string memory) {
        return str;
    }
}

// 調(diào)用合約
contract Caller {
    // 創(chuàng)建子合約對象
    Derived c = new Derived("Hello Constructor");

    // 通過子合約對象訪問父合約和子合約的函數(shù)
    function getResult() public view returns(string memory) {
        return c.getStr();
    }
}

輸出: 我們在Remix中編譯、部署和運行這個合約例子。執(zhí)行結(jié)果如下圖:

solidity中構(gòu)造函數(shù)的可見性是,區(qū)塊鏈,1024程序員節(jié),智能合約,區(qū)塊鏈,以太坊文章來源地址http://www.zghlxwxcb.cn/news/detail-790811.html

到了這里,關(guān)于以太坊智能合約開發(fā):Solidity語言中的構(gòu)造函數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 以太坊智能合約語言Solidity - 3 數(shù)組

    1字節(jié)(Byte) = 8位 (bit), bytes32 = 256位,bytes1 實質(zhì)上就等于 int8 固定長度的數(shù)組一旦被定義就無法再更改,并且長度在一開始就會被顯式定義 我們再來創(chuàng)建一個新的文件用來編寫代碼 字節(jié)數(shù)組無法進(jìn)行基本運算,但是可以比較 字節(jié)數(shù)組還支持其他一些邏輯運算,具體計算結(jié)果

    2023年04月08日
    瀏覽(25)
  • 以太坊智能合約開發(fā)(五):Solidity成績錄入智能合約實驗

    每個學(xué)生分別部署合約Student.sol ,保證只有自己可以修改姓名。老師部署合約StudentScore.sol,用于錄入學(xué)生成績,查詢學(xué)生信息。查詢學(xué)生信息時,需要調(diào)用學(xué)生部署的合約Student.sol。 student.sol合約,用于學(xué)生對自己信息進(jìn)行管理。 學(xué)生的基本信息作為狀態(tài)變量: 聲明構(gòu)造函

    2024年02月07日
    瀏覽(42)
  • 基于以太坊的智能合約開發(fā)Solidity(基礎(chǔ)篇)

    基于以太坊的智能合約開發(fā)Solidity(基礎(chǔ)篇)

    參考教程:基于以太坊的智能合約開發(fā)教程【Solidity】_嗶哩嗶哩_bilibili (1)程序編譯完成后,需要在虛擬機上運行,將合約部署好后便可執(zhí)行剛剛編寫的函數(shù)。(注意, 合約一旦部署,就會永久存在于區(qū)塊鏈上,且不可篡改 ,不過可以銷毀) (2)執(zhí)行完成后,可以得到以

    2024年02月04日
    瀏覽(28)
  • 基于以太坊的智能合約開發(fā)Solidity(事件&日志篇)

    基于以太坊的智能合約開發(fā)Solidity(事件&日志篇)

    (1)事件用于記錄在區(qū)塊鏈上的特定活動,“emit ValueChanged(newValue);”語句的作用是觸發(fā)ValueChanged事件(首先需要聲明事件)。 ①觸發(fā)事件后會生成相應(yīng)日志,上圖黃框就是“emit ValueChanged(newValue);”語句產(chǎn)生的日志,其中“form”指的是觸發(fā)事件的合約賬戶。 ②事件主要是供

    2024年02月04日
    瀏覽(28)
  • 基于以太坊的智能合約開發(fā)Solidity(內(nèi)存&結(jié)構(gòu)體篇)

    參考教程:【內(nèi)存、引用與持久化存儲】1、內(nèi)存與區(qū)塊鏈——storage與memory原理_嗶哩嗶哩_bilibili (1)所有的復(fù)雜類型,即數(shù)組、結(jié)構(gòu)和映射類型,都有一個額外屬性——“數(shù)據(jù)位置”,用來說明數(shù)據(jù)是保存在內(nèi)存memory中還是存儲storage中,保存在memory中的數(shù)據(jù),在函數(shù)執(zhí)行完

    2024年02月04日
    瀏覽(23)
  • 玩以太坊鏈上項目的必備技能(初識智能合約語言-Solidity之旅一)

    玩以太坊鏈上項目的必備技能(初識智能合約語言-Solidity之旅一)

    前面一篇關(guān)于 智能合約 翻譯文講到了,是一種計算機程序,既然是程序,那就可以使用 程序語言 去編寫 智能合約 了。 而若想玩區(qū)塊鏈上的項目,大部分區(qū)塊鏈項目都是開源的,能看得懂 智能合約 代碼,或找出其中的漏洞,那么,學(xué)習(xí) Solidity 這門高級的智能合約語言是有

    2023年04月16日
    瀏覽(26)
  • Solidity智能合約開發(fā) — 3.2-合約的fallback和函數(shù)重載

    每個智能合約有且僅有一個未命名的函數(shù),稱為fallback函數(shù),沒有參數(shù)且沒有返回值,可見性必須是 external,且可以是 virtual的(即可以被重載),也可以有修改器 modifier。 fallback執(zhí)行條件: 如果在一個合約的調(diào)用中,沒有其他函數(shù)與給定的函數(shù)標(biāo)識符匹配時(或沒有提供調(diào)用

    2024年02月09日
    瀏覽(18)
  • 第四章 以太坊智能合約solidity介紹

    Solidity 是一門面向合約的、為實現(xiàn)智能合約而創(chuàng)建的高級編程語言,設(shè)計的目的是能在以太坊虛擬機上運行。 本章大概介紹合約的基本信息,合約的組成,語法方面不做過多的介紹,個人建議多閱讀官方文檔效果更佳,后續(xù)的章節(jié)會開發(fā)ERC20代幣合約案例以便于更好的學(xué)習(xí)智

    2024年02月06日
    瀏覽(26)
  • solidity函數(shù)簽名的實現(xiàn)-solidity實現(xiàn)智能合約教程(8)

    solidity函數(shù)簽名的實現(xiàn)-solidity實現(xiàn)智能合約教程(8)

    猛戳訂閱學(xué)習(xí)專欄???? ?? solidity系列合約源碼+解析 ?? ???? 函數(shù)選擇器: solidity調(diào)用函數(shù)時,calldata的前4個字節(jié)為指定要調(diào)用的函數(shù),這4個字節(jié)稱為函數(shù)選擇器。 以下面的代碼為例。它通過地址addr的調(diào)用合約的transfer方法。 abi.encodeWithSignature(…)返回的前4個字節(jié)是函數(shù)

    2024年02月16日
    瀏覽(30)
  • Solidity智能合約開發(fā) — 3.4-抽象智能合約和接口

    假如一個智能合約中至少一個函數(shù)缺省實現(xiàn)時,即某個函數(shù)缺少{}中的內(nèi)容,這個智能合約就當(dāng)做抽象智能合約。 當(dāng)我們有一個函數(shù)沒想好怎么寫時,必須將該合約標(biāo)為 abstract ,不然編譯會報錯;另外,未實現(xiàn)的函數(shù)需要加 virtual ,以便子合約重寫。抽象智能合約是將智能合

    2024年02月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包