类名冒号后面的是用来定义类的继承
class 派生类名 : 继承方式 基类名
{
派生类的成员
};
继承方式:public、private和protected,默认处理是public。
双冒号(::)用法
(1)表示“域操作符”
例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时,
就要写成void A::f(),表示这个f()函数是类A的成员函数。
(2)直接用在全局函数前,表示是全局函数
例:在VC里,你可以在调用API 函数里,在API函数名前加::
(3)表示引用成员函数及变量,作用域成员运算符
例:System::Math::Sqrt() 相当于System.Math.Sqrt()
=========================================================================
include <eosiolib/eosio.hpp>
class todo_contract : public eosio::contract {
public:
todo_contract(account_name self):eosio::contract(self){}
// @abi action
void create(account_name author, const uint64_t id, const std::string& desc) {
require_auth(author);
todo_table todos(_self,author);
todos.emplace(author, [&](auto& record) {
record.id = id;
record.desc = desc;
record.done = false;
});
eosio::print("todo#", id, " created");
}
// @abi action
void remove(account_name author, const uint64_t id) {
require_auth(author);
todo_table todos(_self,author);
auto iter = todos.find(id);
todos.erase(iter);
eosio::print("todo#", id, " deleted");
}
// @abi action
void toggle(account_name author, const uint64_t id) {
require_auth(author);
todo_table todos(_self,author);
auto iter = todos.find(id);
eosio_assert(iter != todos.end(), "Todo does not exist");
todos.modify(iter, author, [&](auto& record) {
record.done = ! record.done;
});
eosio::print("todo#", id, " toggle todo state");
}
private:
// @abi table todos i64
struct todo {
uint64_t id;
std::string desc;
bool done;
uint64_t primary_key() const { return id; }
EOSLIB_SERIALIZE(todo, (id)(desc)(done))
};
typedef eosio::multi_index<N(todos), todo> todo_table;