C++ 从 class 调用函数而不实例化它
C++ call function from class without instantiating it
在dice.h
,我有
class dice {
public:
dice(int sides);
int roll() const;
static int globalRoll(int sides);
private:
int sides;
并且在dice.cpp
dice::dice(int sides) {
this->sides = sides;
}
int dice::roll() const {
return rand() % sides + 1;
//Here sides refers to member field
}
int dice::globalRoll(int sides) {
return rand() % sides + 1;
//Here sides refers to parameter
}
然后,例如在函数 rollInitiative()
中,我调用了
return dice.globalRoll(20) + getDexMod();
这不起作用,因为“不允许键入名称 [dice]”。我可以执行以下操作,但我不想为单个点名创建实例。
dice d(20);
return d.roll() + getDexMod();
我的假设是我可以从 class 调用静态函数而无需实例化它,因为我的理解是静态函数不引用 [=28= 的实例].
好的,我只需要将 dice.
更改为 dice::
。我觉得很傻。我不太明白其中的区别,但我会研究一下。
此外,由于开销是无关紧要的,并且使用不同的路径来完成同一件事是一种不好的做法(最重要的是它仍然可以全部在一条线上),我刚刚删除了静态函数并将改为使用
dice(int).roll();
在dice.h
,我有
class dice {
public:
dice(int sides);
int roll() const;
static int globalRoll(int sides);
private:
int sides;
并且在dice.cpp
dice::dice(int sides) {
this->sides = sides;
}
int dice::roll() const {
return rand() % sides + 1;
//Here sides refers to member field
}
int dice::globalRoll(int sides) {
return rand() % sides + 1;
//Here sides refers to parameter
}
然后,例如在函数 rollInitiative()
中,我调用了
return dice.globalRoll(20) + getDexMod();
这不起作用,因为“不允许键入名称 [dice]”。我可以执行以下操作,但我不想为单个点名创建实例。
dice d(20);
return d.roll() + getDexMod();
我的假设是我可以从 class 调用静态函数而无需实例化它,因为我的理解是静态函数不引用 [=28= 的实例].
好的,我只需要将 dice.
更改为 dice::
。我觉得很傻。我不太明白其中的区别,但我会研究一下。
此外,由于开销是无关紧要的,并且使用不同的路径来完成同一件事是一种不好的做法(最重要的是它仍然可以全部在一条线上),我刚刚删除了静态函数并将改为使用
dice(int).roll();