摘要:上一篇開發(fā)的文章是開發(fā)基礎(chǔ)指南函數(shù)參數(shù)傳遞,是一種面向?qū)ο蟮木幊陶Z(yǔ)言。析構(gòu)函數(shù)是構(gòu)造函數(shù)的附件,允許你在對(duì)象被銷毀或超出范圍時(shí)運(yùn)行代碼。默認(rèn)構(gòu)造函數(shù)另一個(gè)帶兩個(gè)參數(shù)的構(gòu)造函數(shù)成員函數(shù)聲明要遵循的實(shí)現(xiàn)不修改對(duì)象狀態(tài)的函數(shù)應(yīng)該標(biāo)記為。
上一篇C++開發(fā)EOS的文章是C++開發(fā)EOS基礎(chǔ)指南:函數(shù)參數(shù)傳遞,C++是一種面向?qū)ο蟮木幊陶Z(yǔ)言。它有一個(gè)強(qiáng)大的繼承系統(tǒng),私有和公共成員變量,以及通過成員初始化列表在構(gòu)造函數(shù)中初始化它們的好方法。析構(gòu)函數(shù)是構(gòu)造函數(shù)的附件,允許你在對(duì)象被銷毀或超出范圍時(shí)運(yùn)行代碼。今天讓我們創(chuàng)建一個(gè)簡(jiǎn)單的CryptoCurrency類,另外看看繼承。
// @url: https://repl.it/@MrToph/CPPBasics-Classes-1 #include繼承#include #include //自動(dòng)解析std命名空間,所以我們可以寫字符串而不是std::string using namespace std; //聲明一個(gè)類。 //類通常在頭文件(.h或.hpp)中聲明。 class Currency { //默認(rèn)情況下,成員變量和函數(shù)是私有的。 string name; double priceInUSD; //此后的所有成員都是公共的 ????//直到找到“private:”或“protected:”。 public: //默認(rèn)構(gòu)造函數(shù) Currency(); //另一個(gè)帶兩個(gè)參數(shù)的構(gòu)造函數(shù) Currency(const string &_name, const double price); //成員函數(shù)聲明(要遵循的實(shí)現(xiàn)) void setName(const string &dogsName); void setPrice(double price); //不修改對(duì)象狀態(tài)的函數(shù)應(yīng)該標(biāo)記為const。 ????//如果給定對(duì)象的const引用,則允許你調(diào)用它們。 void print() const; //函數(shù)也可以在類體內(nèi)定義。 ????//這樣定義的函數(shù)會(huì)自動(dòng)內(nèi)聯(lián)。 void bark() const { cout << name << " barks! "; } // C++有析構(gòu)函數(shù)。它們是建造者的標(biāo)識(shí)當(dāng)一個(gè)對(duì)象被刪除或超出范圍時(shí)調(diào)用它們。 virtual ~Currency(); }; //分號(hào)必須遵循類聲明。 //類成員函數(shù)通常在.cpp文件中實(shí)現(xiàn)。 Currency::Currency() { cout << "A currency has been created "; } Currency::Currency(const string &_name, double price) { name = _name; priceInUSD = price; cout << name << " has been created with a price of " << price << "USD "; } void Currency::setName(const string ¤cyName) { name = currencyName; } void Currency::setPrice(double price) { priceInUSD = price; } //請(qǐng)注意,僅在聲明中需要“virtual”,而不是定義。 void Currency::print() const { cout << name << " is at a price of " << priceInUSD << "USD "; } Currency::~Currency() { cout << name << " has been hard forked! "; } //struct與類相同,但它們通常僅用于封裝數(shù)據(jù)很少包含方法,在這些情況下更喜歡類 struct block_header { //默認(rèn)情況下,結(jié)構(gòu)字段是公共的 uint64_t timestamp; uint64_t blockNumber; //指向block_header對(duì)象的指針 block_header* prevBlock; }; int main() { //這會(huì)運(yùn)行默認(rèn)構(gòu)造函數(shù) Currency bitcoin; bitcoin.setName("Bitcoin"); bitcoin.setPrice(1E5); bitcoin.print(); Currency eos("EOS", 100); eos.print(); block_header genesis; genesis.timestamp = 1528445288; genesis.blockNumber = 0; //沒有用戶定義構(gòu)造函數(shù)的結(jié)構(gòu) ????//可以通過“aggregate initialization”初始化 block_header second{1528445288, 1, &genesis}; cout << "Timestamp of second block " << second.timestamp << " "; //或通過提供struct的字段名稱顯式它們需要與結(jié)構(gòu)中定義的順序相同,但允許你跳過初始化值 block_header third{.blockNumber = 2, .prevBlock = &second}; // third.timestamp初始化為0 cout << "Timestamp of block after block #" << third.prevBlock->blockNumber << ": " << third.timestamp << " "; }
如果沒有強(qiáng)制性的Animal類示例,繼承的簡(jiǎn)介會(huì)是什么?請(qǐng)注意,C++支持多重繼承,這是一種(有爭(zhēng)議的)功能,其中一個(gè)類可以同時(shí)從多個(gè)類繼承。在開發(fā)智能合約時(shí),你可能永遠(yuǎn)不需要它,所以讓我們看一下從單個(gè)類繼承的情況。
#includeusing namespace std; class Animal { string name; int weight; public: //默認(rèn)構(gòu)造函數(shù)將其值“delegates”給其他構(gòu)造函數(shù) Animal() : Animal("Peter", 80){}; //構(gòu)造函數(shù)獲取名稱和權(quán)重并初始化 ??? //具有使用相同名稱的“initializer list”的類成員 Animal(const string &name, int weight) : name(name), weight(weight) { // we already write the function body here cout << name << " was created "; }; void setName(const string &dogsName); string getName() const; void setWeight(int weight); //可以覆蓋的函數(shù)必須聲明為_virtual_ virtual void print() const; //函數(shù)也可以在類聲明中定義 ????//但要小心,因?yàn)樗鼈儠?huì)自動(dòng)內(nèi)聯(lián)。 void eat() { weight += 5; } //如果要派生類,析構(gòu)函數(shù)應(yīng)該是虛擬的; ????//如果它不是虛擬的,那么如果通過基類引用或指針銷毀對(duì)象,則不會(huì)調(diào)用派生類的析構(gòu)函數(shù)。 virtual ~Animal(); }; void Animal::setName(const string &animalName) { name = animalName; } string Animal::getName() const { return name; } void Animal::setWeight(int animalWeight) { weight = animalWeight; } //“virtual”僅在聲明中需要,而不是在定義中。 void Animal::print() const { cout << name << " weighs " << weight << "kg "; } Animal::~Animal() { cout << "Animal " << name << " died "; } // Dog現(xiàn)在是Animal的子類,并繼承了Animal的成員。 //但是如果沒有g(shù)etter,可能無法直接訪問私有成員或方法。 class Dog : public Animal { string breed; public: Dog(const string &name,int weight,const string &breed):Animal(name,weight),breed(breed) { cout << "Woof "; } //被重載的虛擬方法應(yīng)標(biāo)記為重載。 void print() const override; }; void Dog::print() const { //調(diào)用Animal的打印功能 Animal::print(); //無法直接訪問.name,因?yàn)樗撬接械?????//需要訪問public getter getName cout << Animal::getName() << " is a " << breed << " dog "; } int main() { Dog dog("Carl", 10, "Dackel"); dog.print(); }
分享一個(gè)交互式的在線編程實(shí)戰(zhàn),EOS智能合約與DApp開發(fā)入門:
EOS教程
本課程幫助你快速入門EOS區(qū)塊鏈去中心化應(yīng)用的開發(fā),內(nèi)容涵蓋EOS工具鏈、賬戶與錢包、發(fā)行代幣、智能合約開發(fā)與部署、使用代碼與智能合約交互等核心知識(shí)點(diǎn),最后綜合運(yùn)用各知識(shí)點(diǎn)完成一個(gè)便簽DApp的開發(fā)。
這里是原文
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27509.html
摘要:上一篇開發(fā)的文章是開發(fā)基礎(chǔ)指南函數(shù)參數(shù)傳遞,是一種面向?qū)ο蟮木幊陶Z(yǔ)言。析構(gòu)函數(shù)是構(gòu)造函數(shù)的附件,允許你在對(duì)象被銷毀或超出范圍時(shí)運(yùn)行代碼。默認(rèn)構(gòu)造函數(shù)另一個(gè)帶兩個(gè)參數(shù)的構(gòu)造函數(shù)成員函數(shù)聲明要遵循的實(shí)現(xiàn)不修改對(duì)象狀態(tài)的函數(shù)應(yīng)該標(biāo)記為。 上一篇C++開發(fā)EOS的文章是C++開發(fā)EOS基礎(chǔ)指南:函數(shù)參數(shù)傳遞,C++是一種面向?qū)ο蟮木幊陶Z(yǔ)言。它有一個(gè)強(qiáng)大的繼承系統(tǒng),私有和公共成員變量,以及通過成...
摘要:允許智能合約定義自己的私有數(shù)據(jù)庫(kù)表。有了多級(jí)索引,智能合約就具備了操作類似數(shù)據(jù)庫(kù)模塊的功能。因此雖然只有一列,但是的靈活性絲毫不亞于傳統(tǒng)的數(shù)據(jù)表。 上一章我們學(xué)習(xí)了開發(fā)智能合約之前需要知道的必要概念: 什么是webAssembly以及它在智能合約上下游中的位置; 什么是ABI以及怎樣使用eosiocpp工具產(chǎn)生ABI和wasm、wast hello智能合約的簡(jiǎn)單入門:部署和調(diào)用 ...
摘要:查詢數(shù)據(jù)使用方法和其他迭代器操作查詢數(shù)據(jù)。數(shù)據(jù)庫(kù)服務(wù)的對(duì)象是維修技師和車主。如果查找成功,迭代器就會(huì)指向所需的數(shù)據(jù)對(duì)象。 EOS 數(shù)據(jù)庫(kù)開發(fā)實(shí)戰(zhàn) 上次的文章詳細(xì)講解了 EOS 數(shù)據(jù)庫(kù)的架構(gòu),本文將以官方示例為基礎(chǔ),詳解 EOS 數(shù)據(jù)庫(kù)的開發(fā)實(shí)戰(zhàn)。 基本步驟 在智能合約里與 EOS 數(shù)據(jù)庫(kù)交互,首先要定義存儲(chǔ)的數(shù)據(jù): 定義對(duì)象:具體就是定義一個(gè) C++ 類或者 C++ 結(jié)構(gòu)體,數(shù)據(jù)表...
摘要:我們目前正處于一個(gè)新興的區(qū)塊鏈開發(fā)行業(yè)中。,一種在以太坊開發(fā)人員中流行的新的簡(jiǎn)單編程語(yǔ)言,因?yàn)樗怯糜陂_發(fā)以太坊智能合約的語(yǔ)言。它是全球至少萬(wàn)開發(fā)人員使用的世界上最流行的編程語(yǔ)言之一。以太坊,主要是針對(duì)工程師使用進(jìn)行區(qū)塊鏈以太坊開發(fā)的詳解。 我們目前正處于一個(gè)新興的區(qū)塊鏈開發(fā)行業(yè)中。區(qū)塊鏈技術(shù)處于初期階段,然而這種顛覆性技術(shù)已經(jīng)成功地風(fēng)靡全球,并且最近經(jīng)歷了一場(chǎng)與眾不同的繁榮。由于許多...
閱讀 2829·2023-04-26 02:00
閱讀 2789·2019-08-30 15:54
閱讀 882·2019-08-30 11:15
閱讀 1516·2019-08-29 15:31
閱讀 929·2019-08-29 14:12
閱讀 503·2019-08-29 13:08
閱讀 853·2019-08-27 10:51
閱讀 2722·2019-08-26 12:17