【发布时间】:2020-03-20 15:01:34
【问题描述】:
我的目标总结
我想在 C++ 中的多个 .cpp 文件之间创建一个已声明类的全局实例。
说明
如果你想走得快,你可以在预期之后跳。
我知道很多人说我不应该使用全局变量,原因太多...阅读我的解释以了解我为什么需要它们。
第 1 步:
我正在编写一个 C++ 程序,该程序在头文件中定义了一个类。
(该类的函数在 cpp 文件中声明。)
为了解释它,我将使用过度简化的假设代码。 (不是实际的。)
简化假设Class.h的代码:
class Class {
public:
Class(intx,int y); //Does a lot of things
int OP1(int x); //Dummy operation
int OP2(int x); //Dummy operation
private:
type ManyVars;
}
简化假设main.cpp的代码
#include "Class.h"
Class Member(140,360); //Declares it with parameters
bool Func1(int x) { //Dummy function
int y = Member.OP2(x);
return x > Member.OP1(y);
}
bool Func2(int x) { //Dummy function
int y = Member.OP2(x) * x;
return x > Member.OP1(y) +1;
}
int main() {
int x;
std::cin >> x;
y = Func2(x);
z = Func1(y * x / 5);
return Func2(z) + x / y;
}
就我而言,一切正常,但 main.cpp 中的代码非常大,因为我有超过 16 个函数,包括 2 个大函数!
(我展示在我的示例中只有两个函数很简单。)
第 2 步:
为了使代码更易于阅读,我将小函数移到另外两个文件 Funcs.cpp 和 Funcs.h 中, 就像一个图书馆。
然后,我将大函数移动到一个新的 .cpp 文件中,每个函数都包含在另一个头文件中。
(在示例中隐藏,因为它类似于 Funcs.cpp。)
所以,现在假设的main.cpp 看起来像这样:
#include "Class.h"
#include "Funcs.h"
Class Member(140,360);
int main() {
int x;
std::cin >> x;
int y = Func2(x);
int z = Func1(y * x / 5);
return Func2(z) + x / y;
}
假设的Funcs.cpp 看起来像这样:
#include "Class.h"
#include "Funcs.h"
bool Func1(int x) {
int y = Member.OP2(x);
return x > Member.OP1(y);
}
bool Func2(int x) {
int y = Member.OP2(x) * x;
return x > Member.OP1(y) +1;
}
现在出现一个问题:Member 仅定义在 main.cpp 但我也需要它 Funcs.cpp (以及其他函数文件也).
第 3 步:
我尝试为每个函数添加另一个Class 类型的输入值,并在使用时将Member 放入其中。它有效,但功能看起来很糟糕! 我不希望每个函数都有额外的参数!所以我暂时将代码恢复到第 1 步。
期望
我想要的是在它们之间共享同一个实例的任何方式。 它基本上是一个全局变量。
我想保留相同的功能。 int y = Member.OP2(x) 不能更改 每个文件的开头都可以更改。
我希望能够声明多个这样的Members(我不会,但一定可以这样做)。
有人知道以这种方式共享实例的方法吗?
如果有不清楚的地方请告诉我。
【问题讨论】:
-
但是
Member不是成员,它是一个全局变量。您可以使用与任何全局变量相同的方法在不同的源文件之间共享它。
标签: c++ function class singleton