仲間に薬草を使う場合は静的メンバ関数を用いることは適していません。なぜなら静的メンバ関数は静的メンバ変数のみ取り扱うことができメンバ変数を取り扱うことができないからです


ソーラー「


でも


仲間に薬草を使うプログラムには注意点があります



仲間に薬草を使う場合は


    💖クラスの💖を用いることは適していません


                   なぜなら


            💖クラスの静的メンバ関数は💖


クラスの静的メンバ変数のみ取り扱うことができ


クラスのメンバ変数を取り扱うことができないからです」



マックス「na,nannda?? 宇宙語か?」



てんC「確か以前のエピソードで


クラスの静的メンバ関数の定義には


クラスの静的メンバ変数しか用いることができないということを


考察してきました


そのことと関係があるのですか?」



ソーラー「そうなんです


まずは


前のエピソードで登場してきた仲間に薬草を使うプログラムをご覧ください

👇


#include <iostream>

#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています

using namespace std;


class GameCharacter {


public:

string name;

int HP;

int MP;


static int numberofMedicalHerb;//🌞numberofMedicalHerbの静的メンバ変数宣言を実行しています


void statusDataDisplay();

void useMedicalHerb(GameCharacter& a);//薬草を使うメンバ関数です



};



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

cout << "HP " << HP << "\n";

cout << "MP " << MP << "\n";

}


void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << name << "は" << a.name << "に薬草をつかった" << "\n";

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}


int GameCharacter::numberofMedicalHerb = 18;


int main() {


GameCharacter Lyliane;

GameCharacter Elfine;

Lyliane.name = "リリアーネ";

Lyliane.HP = 10;

Lyliane.MP = 8;



Elfine.name = "エルフィン";

Elfine.HP = 15;

Elfine.MP = 5;


Lyliane.statusDataDisplay();

Elfine.statusDataDisplay();


Lyliane.useMedicalHerb(Elfine);


Lyliane.statusDataDisplay();

Elfine.statusDataDisplay();

return 0;

}


プログラムの実行結果


リリアーネ

HP 10

MP 8

エルフィン

HP 15

MP 5

リリアーネはエルフィンに薬草をつかった

エルフィンのHPは2回復した

薬草の数は17個になった

リリアーネ

HP 10

MP 8

エルフィン

HP 17

MP 5



ソーラー「


このプログラムでは


仲間に薬草を使うことができるよう


クラスGameCharacter でメンバ関数宣言


void useMedicalHerb(GameCharacter& a);


が設定され


クラスGameCharacter でメンバ関数の定義が

👇のように

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << name << "は" << a.name << "に薬草をつかった" << "\n";

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆

設定されています


このクラスGameCharacterのメンバ関数


useMedicalHerb(GameCharacter& a)の定義内では



クラスGameCharacterのメンバ変数


name


が用いられています



ここがポイントなんです



静的メンバ関数は


クラスのメンバ変数を定義内に用いることができないので


仲間に薬草を使うことができるよう


クラスGameCharacter内 で静的メンバ関数宣言


static void useMedicalHerb(GameCharacter& a);



を設定した場合


クラスGameCharacterの静的メンバ関数


void useMedicalHerb(GameCharacter& a)


の定義内で


クラスGameCharacterのメンバ変数nameを


用いることは出来ません


具体的には


以下のように


クラスGameCharacterのメンバ変数nameを


用いて


クラスGameCharacterの静的メンバ関数


static void useMedicalHerb(GameCharacter& a)の定義を設定することはできません


👇


void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << name << "は" << a.name << "に薬草をつかった" << "\n";

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆


ソーラー「この


クラスGameCharacterの静的メンバ関数


static void useMedicalHerb(GameCharacter& a)


の定義内では


cout << name << "は" << a.name << "に薬草をつかった" << "\n";


のように


クラスGameCharacterのメンバ変数nameが用いられています



クラスGameCharacterのの定義内では


クラスGameCharacterのメンバ変数を用いることはできないので



この


クラスGameCharacterの静的メンバ関数


static void useMedicalHerb(GameCharacter& a)


の定義

👇

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << name << "は" << a.name << "に薬草をつかった" << "\n";

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆

が用いられたプログラムはビルドエラーが表示されることになります


(ただし void GameCharacter::useMedicalHerb(GameCharacter& a))のように


引数部分にGameCharacter& a

つまり

 GameCharacter&型の参照変数aを設定し


GameCharacter型のオブジェクトを代入することができるよう設定することは可能です


エラーが表示されるようなことはありません


引数部分にGameCharacter& aが設定された場合


クラスGameCharacterの静的メンバ関数


static void useMedicalHerb(GameCharacter& a)の定義


のブロック{}内で


cout << a.name << "に薬草をつかった" << "\n";

a.HP += 2;


のように

aのメンバ変数

a.name

a.HPを用いることは可能となります


詳しくは後ほど解説されます(*´▽`*))


結局


クラスGameCharacterの静的メンバ関数


static void useMedicalHerb(GameCharacter a)


の定義に


クラスGameCharacterのメンバ変数nameが以下のように用いられていると

👇

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << name << "は" << a.name << "に薬草をつかった" << "\n";

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆


このクラスGameCharacterが用いられたプログラムは


エラーが表示されることになります




そのことを示すプログラムはこちらです

👇


#include <iostream>

#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています

using namespace std;


class GameCharacter {


public:

string name;

int HP;

int MP;


static int numberofMedicalHerb;//ここに追加しました


void statusDataDisplay();

static void useMedicalHerb(GameCharacter& a);//🌞ここに注目useMedicalHerbの静的メンバ関数宣言がおこなわれています



};



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

cout << "HP " << HP << "\n";

cout << "MP " << MP << "\n";

}


void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << name << "は" << a.name << "に薬草をつかった" << "\n";

//👆ここに注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}


int GameCharacter::numberofMedicalHerb = 18;


int main() {


GameCharacter Lyliane;

GameCharacter Elfine;

Lyliane.name = "リリアーネ";

Lyliane.HP = 10;

Lyliane.MP = 8;



Elfine.name = "エルフィン";

Elfine.HP = 15;

Elfine.MP = 5;


Lyliane.statusDataDisplay();

Elfine.statusDataDisplay();


GameCharacter::useMedicalHerb(Elfine);


Lyliane.statusDataDisplay();

Elfine.statusDataDisplay();


Elfine.useMedicalHerb(Lyliane);


Lyliane.statusDataDisplay();

Elfine.statusDataDisplay();



return 0;

}



プログラムの実行結果


エラー (アクティブ) E0245 静的でないメンバー参照は特定のオブジェクトを基準とする相対参照である必要があります

エラー C2597 静的でないメンバー 'GameCharacter::name' への参照が正しくありません。


マックス「このように


ビルドエラーが生じるのは


クラスGameCharacterの静的メンバ関数useMedicalHerbの定義内で


cout << name << "は" << a.name << "に薬草をつかった" << "\n";


のように


クラスGameCharacterのメンバ変数


nameが用いられているからなんだろう?


じゃあ


クラスGameCharacterのメンバ変数


nameが用いられていなければ


このプログラムは実行できるわけだ」


てんC「そうですね


まとめると



GameCharacterの定義内で


GameCharacter


GameCharacter💖💖


は使用することができますが



GameCharacter💖💖の定義内で


GameCharacterを使用することはできません


さらに付け加えると


GameCharacter💖💖の定義内で


GameCharacterを使用することはできるのですね」




マックス「


ところで

いまの


クラスGameCharacterの静的メンバ関数useMedicalHerbの定義

👇

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << name << "は" << a.name << "に薬草をつかった" << "\n";

//👆この行に注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆

のブロック内{}で用いられている


このname とa.nameの違いがよくわからんな


クラスGameCharacterの静的メンバ関数の定義のブロック{}内で


クラスGameCharacterのメンバ変数nameが使えないということだったが


a.nameも使えないということか?」


てんC「nameはクラスGameCharacterのメンバ変数というところがポイントですね


もしも


クラスGameCharacterのuseMedicalHerbの定義

👇

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << name << "は" << a.name << "に薬草をつかった" << "\n";

//👆この行に注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆


が設定されているのではなく


代わりに


クラスのuseMedicalHerbの定義

👇

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << name << "は" << a.name << "に薬草をつかった" << "\n";

//👆この行に注目

a.HP += 2;


cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆


が設定されているのであれば



LylianeのクラスGameCharacter型のオブジェクト宣言が行われ


クラスGameCharacter型のオブジェクトLylianeが生成されたとき


クラスGameCharacter型のオブジェクトLylianeのメンバ変数


Lyliane.name

Lyliane.HP

Lyliane.MP


が生成され


クラスGameCharacter型のオブジェクトLylianeのメンバ関数useMedicalHerbが実行される際


クラスGameCharacterのメンバ関数useMedicalHerbの定義のブロック{}で用いられている


クラスGameCharacterのメンバ変数nameは


LylianeのクラスGameCharacter型のオブジェクト宣言が行われたときに


生成される


クラスGameCharacter型のオブジェクトLylianeのメンバ変数Lyliane.nameをあらわすことになります


しかし


クラスGameCharacterに


クラスGameCharacter内 で静的メンバ関数宣言


static void useMedicalHerb(GameCharacter& a);



クラスGameCharacterのuseMedicalHerbの定義

👇

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << name << "は" << a.name << "に薬草をつかった" << "\n";

//👆この行に注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆


が設定されている場合は



GameCharacter💖useMedicalHerb💖の定義内で


GameCharacternameを使用することはできないので


エラーが生じることになります


もちろん


クラスGameCharacter型のオブジェクトLylianeの静的メンバ関数useMedicalHerbが実行される際


クラスGameCharacterの静的メンバ関数useMedicalHerbの定義のブロック内で用いられている


クラスGameCharacterのメンバ変数nameは


LylianeのクラスGameCharacter型のオブジェクト宣言が行われたときに


生成される


クラスGameCharacter型のオブジェクトLylianeのメンバ変数nameをあらわすなんてことにはおこりません」


マックス「ここまでOKなんだが(*^^*)」


てんC「はい そして


クラスGameCharacterの静的メンバ関数宣言


static void useMedicalHerb(GameCharacter& a);


が設定され


クラスGameCharacterの静的メンバ関数


static void useMedicalHerb(GameCharacter& a)の定義が

👇

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout <<name << "は" << a.name << "に薬草をつかった" << "\n";

//👆ここに注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb =numberofMedicalHerb - 1;

cout << "薬草の数は" <<numberofMedicalHerb << "個になった" << "\n";


}

👆

のように設定されている場合


このクラスGameCharacterの静的メンバ関数


static void useMedicalHerb(GameCharacter& a)の定義内で


使用できないのは


クラスのGameCharacterのメンバ変数


name



使用できるのは


クラスのGameCharacterの静的メンバ変数


numberofMedicalHerb


となります


つまり


💖クラスGameCharacterの静的メンバ関数💖の💖定義内💖で


クラスのGameCharacterのメンバ変数


name


が記述されている場合


コンパイラは


クラスGameCharacterのメンバ変数name



💖クラスGameCharacterの静的メンバ関数💖の💖定義内💖で


用いられていると判断し


ビルドエラーが表示されることになるのですね


もちろん


リリアーネにエルフィンのHPを回復させる


クラスGameCharacter型のオブジェクトLylianeの静的メンバ関数


Lyliane.useMedicalHer(Elfine);


を実行することはできません


実行できたなら


クラスGameCharacterの静的メンバ関数の定義のブロック内で用いられている命令文の中の


クラスGameCharacterのメンバ変数nameに


LylianeのクラスGameCharacter型のオブジェクト宣言が行われたときに


生成される



クラスGameCharacter型のオブジェクトLylianeのメンバ変数

Lyliane.name


が代入されたものが実行されることになりそうですが


もちろん


Lyliane.useMedicalHer(Elfine);


を実行することはできず


クラスGameCharacterの静的メンバ関数の定義のブロック内で用いられている命令文の中の


クラスGameCharacterのメンバ変数nameに


LylianeのクラスGameCharacter型のオブジェクト宣言が行われたときに


生成される


クラスGameCharacter型のオブジェクトLylianeのメンバ変数


Lyliane.nameが代入されるということはおこりません」






マックス「😊ということは・・・・・


・・・・・・・・・・・・・・


ううん??


クラスGameCharacterの静的メンバ関数宣言


static void useMedicalHerb(GameCharacter& a);


が設定され



クラスGameCharacterの静的メンバ関数


static void useMedicalHerb(GameCharacter& a)の定義が行われているのでなく


代わりに


クラスGameCharacterのメンバ関数宣言


void useMedicalHerb(GameCharacter& a);


が設定され


クラスGameCharacterのメンバ関数


void useMedicalHerb(GameCharacter& a)の定義が


👇

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout <<name << "は" << a.name << "に薬草をつかった" << "\n";

//👆ここに注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb =numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆

のように設定されている場合



main関数内で


クラスGameCharacter型のオブジェクトLylianeメンバ関数


Lyliane.useMedicalHerb(Elfinne);


が実行された場合


a.name

a.HP



Elfinne.name

Elfinne.HP


をあらわすことになるんだろう


同様に


🍊クラスGameCharacterの静的メンバ関数の定義内のブロック内


👇

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout <<name << "は" << a.name << "に薬草をつかった" << "\n";

//👆ここに注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb =numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆

name

をもちいることはできなくても


a.name

a.HP

使用することは可能なのか?」



ソーラー「そうなんです😊 そういうふうに設定されているんです」


マックス「ほほう」


ソーラー「


クラスGameCharacterの静的メンバ関数の定義内で


クラスGameCharacterのメンバ変数nameを用いることができないのなら


クラスGameCharacterのメンバ変数nameを取り除いてしまえばよいことになります


ですので


クラスGameCharacterの静的メンバメソッド


void useMedicalHerb(GameCharacter& a)の定義内

👇

void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout <<name << "は" << a.name << "に薬草をつかった" << "\n";

//👆ここに注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb =numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

👆


cout << name << "は" << a.name << "に薬草をつかった" << "\n";


の部分を


クラスGameCharacterのメンバ変数nameを含む


name << "は"


を取り除いた


cout << a.name << "に薬草をつかった" << "\n";


に変更してプログラムを再度実行してみましょう


静的メンバ関数useMedicalHerb内で


a.nameがもちいられているけど


本当にちゃんと実行できるかな?


そのプログラムはこちらとなります


👇


#include <iostream>

#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています

using namespace std;


class GameCharacter {


public:

string name;

int HP;

int MP;


static int numberofMedicalHerb;//ここに追加しました


void statusDataDisplay();

static void useMedicalHerb(GameCharacter& a);//ここに追加しました



};



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

cout << "HP " << HP << "\n";

cout << "MP " << MP << "\n";

}


void GameCharacter::useMedicalHerb(GameCharacter& a) {

cout << a.name << "に薬草をつかった" << "\n";

//👆ここに注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

int GameCharacter::numberofMedicalHerb = 18;


int main() {


GameCharacter Lyliane;

GameCharacter Elfine;

Lyliane.name = "リリアーネ";

Lyliane.HP = 10;

Lyliane.MP = 8;



Elfine.name = "エルフィン";

Elfine.HP = 15;

Elfine.MP = 5;


Lyliane.statusDataDisplay();

Elfine.statusDataDisplay();


GameCharacter::useMedicalHerb(Elfine);


Lyliane.statusDataDisplay();

Elfine.statusDataDisplay();


Elfine.useMedicalHerb(Lyliane);


Lyliane.statusDataDisplay();

Elfine.statusDataDisplay();



return 0;

}


ビルド実行結果


リリアーネ

HP 10

MP 8

エルフィン

HP 15

MP 5

エルフィンに薬草をつかった👈ここが変化しました

エルフィンのHPは2回復した

薬草の数は17個になった

リリアーネ

HP 10

MP 8

エルフィン

HP 17

MP 5


ソーラー「うまく実行できました


ただし この場合


クラスGameCharacter の静的メンバ関数useMedicalHerb(GameCharacter& a)の定義のブロック{}内ではクラスGameCharacter のメンバ変数nameを使用することができないため


ビルド実行結果に


エルフィンに薬草をつかった


を表示することはできますが



はエルフィンに薬草をつかった


を表示することはできませんね



このクラスGameCharacterの静的メンバ関数useMedicalHerb(GameCharacter& a)では


誰が薬草を使ったかを表現することはできないというわけです」



☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆


とはいえ


静的メンバ関数を使って


リリアーネはエルフィンに薬草をつかった


を表示する方法もあります


GameCharacterのクラス宣言内で


クラスGameCharacterの静的メンバ関数宣言


void GameCharacter::useMedicalHerb(GameCharacter& a, GameCharacter& b);

(👆引数を

GameCharacter& a

GameCharacter& b

のように

2つ設定しているのがポイントです)


を実行し


クラスGameCharacterの静的メンバ関数useMedicalHerbの定義を


void GameCharacter::useMedicalHerb(GameCharacter& a, GameCharacter& b) {

cout << b.name << "は" << a.name << "に薬草をつかった" << "\n";

👆この行に注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}


のように変更し


GameCharacter::useMedicalHerb(Elfine,Lyliane);


を実行すれば


プログラムの実行結果に


リリアーネはエルフィンに薬草をつかった


を表示することができます


そのことを示すプログラムはこちらです

👇

#include <iostream>

#include <string>//文字列を取り扱うためにヘッダファイル <string>をインクルードしています

using namespace std;


class GameCharacter {


public:

string name;

int HP;

int MP;


static int numberofMedicalHerb;//ここに追加しました


void statusDataDisplay();

static void useMedicalHerb(GameCharacter& a, GameCharacter& b);//ここに追加しました



};



void GameCharacter::statusDataDisplay() {


cout << name << "\n";

cout << "HP " << HP << "\n";

cout << "MP " << MP << "\n";

}


void GameCharacter::useMedicalHerb(GameCharacter& a, GameCharacter& b) {

cout << b.name << "は" << a.name << "に薬草をつかった" << "\n";

//👆ここに注目

a.HP += 2;

cout << a.name << "のHPは" << "2回復した" << "\n";

numberofMedicalHerb = numberofMedicalHerb - 1;

cout << "薬草の数は" << numberofMedicalHerb << "個になった" << "\n";


}

int GameCharacter::numberofMedicalHerb = 18;


int main() {


GameCharacter Lyliane;

GameCharacter Elfine;

Lyliane.name = "リリアーネ";

Lyliane.HP = 10;

Lyliane.MP = 8;



Elfine.name = "エルフィン";

Elfine.HP = 15;

Elfine.MP = 5;


Lyliane.statusDataDisplay();

Elfine.statusDataDisplay();


GameCharacter::useMedicalHerb(Elfine,Lyliane);


Lyliane.statusDataDisplay();

Elfine.statusDataDisplay();



return 0;

}


ビルド実行結果


リリアーネ

HP 10

MP 8

エルフィン

HP 15

MP 5

リリアーネはエルフィンに薬草をつかった👈ここに注目

エルフィンのHPは2回復した

薬草の数は17個になった

リリアーネ

HP 10

MP 8

エルフィン

HP 17

MP 5


マックス「・・・


ということは


仲間に薬草を使う場合は静的メンバ関数を用いることは適していません。なぜなら静的メンバ関数は静的メンバ変数のみ取り扱うことができメンバ変数を取り扱うことができないからです


とはいえ


仲間に薬草を使う場合に


静的メンバ関数を用いて


GameCharacter::useMedicalHerb(Elfine,Lyliane);


を実行する方法もあるってわけか」


































  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る