C++ 在C+中不创建新对象的情况下,是否可以将变量从类中传递出去+;
我有一个变量,它是我的一个类的成员,另一个类需要它,但我不确定如何在不使用全局变量的情况下有效地在它们之间传递值,如果可能的话,我希望避免使用全局变量。我知道我可以创建一个对象,但这将调用原始类的构造函数,该类将执行许多函数并将不必要的结果写入内存,这将浪费系统资源 是否有一种简单的方法在两个函数之间传递此值C++ 在C+中不创建新对象的情况下,是否可以将变量从类中传递出去+;,c++,oop,class,C++,Oop,Class,我有一个变量,它是我的一个类的成员,另一个类需要它,但我不确定如何在不使用全局变量的情况下有效地在它们之间传递值,如果可能的话,我希望避免使用全局变量。我知道我可以创建一个对象,但这将调用原始类的构造函数,该类将执行许多函数并将不必要的结果写入内存,这将浪费系统资源 是否有一种简单的方法在两个函数之间传递此值 Update:需要变量的类,称为no\u of\u existing\u devices。class Initialise的目的是打开一个文件并计算它包含的测试行数,然后将该数字放入现有
Update:需要变量的类,称为
no\u of\u existing\u devices
。class Initialise
的目的是打开一个文件并计算它包含的测试行数,然后将该数字放入现有设备的变量int no\u
,然后Device::Device()
使用该变量为每个设备创建一个对象
class Device
{
public:
void view_attribute_list();
void set_attribute();
Device();
};
Device::Device()
{
for (int count = 0; count < no_of_existing_devices; count ++)
{
// Create an object for each iteration, up to a maximum of no_of_existing_devices
}
}
类设备
{
公众:
无效视图\属性\列表();
void set_属性();
装置();
};
设备::设备()
{
对于(int count=0;count<现有设备的数量;count++)
{
//为每次迭代创建一个对象,最多不超过现有设备的数量
}
}
此变量所属的类
class Initialise
{
public:
int no_of_existing_devices;
bool initialisation;
string existing_device_list[100];
void initialise_existing_devices();
Initialise();
};
Initialise::Initialise()
{
no_of_existing_devices = 0;
}
void Initialise::initialise_existing_devices()
{
string line;
ifstream DeviceList;
DeviceList.open("devices/device_list");
while (true)
{
getline(DeviceList, line, '\n');
if (DeviceList.eof())
{
break;
}
++ no_of_existing_devices;
}
DeviceList.close();
DeviceList.open("devices/device_list");
for (int i = 0; i < no_of_existing_devices; i ++)
{
getline(DeviceList, line, '\n');
existing_device_list[i] = line;
}
Device existing_devices[no_of_existing_devices];
!initialisation; // Existing devices are now initialised
}
类初始化
{
公众:
现有设备的int no_;
布尔初始化;
字符串现有设备列表[100];
无效初始化现有设备();
初始化();
};
初始化::初始化()
{
现有设备的数量=0;
}
void Initialise::初始化现有设备()
{
弦线;
ifstream魔鬼主义者;
设备列表打开(“设备/设备列表”);
while(true)
{
getline(设备列表,行'\n');
if(DeviceList.eof())
{
打破
}
++现有设备的数量;
}
魔鬼主义者;
设备列表打开(“设备/设备列表”);
对于(int i=0;i<现有设备的数量;i++)
{
getline(设备列表,行'\n');
现有设备清单[i]=线路;
}
设备现有_设备[没有_现有_设备];
!initialization;//现有设备现在已初始化
}
在类似的情况下,我只是将指针传递给成员——当时我必须调用一个成员函数,因此它是一个指向成员函数的指针,
这有点混乱,但它可以工作:-)。如果原始类中的变量可以在没有类实例的情况下保存值,我将假定该变量是静态的。如果不是,则创建类的公共静态成员。并在目标类中使用它。 比如:
// .h file
class A
{
public:
static int a;
}
// .cpp file
int A::a = 123;
// .cpp file of class B
void B::foo()
{
cout << A::a;
}
/.h文件
甲级
{
公众:
静态int a;
}
//.cpp文件
int A::A=123;
//.cpp B类文件
void B::foo()
{
cout如果是类属性(内部变量),然后您可以通过get方法获取引用。否则,您可以在要从另一个类访问属性的类上使用friend
关键字。例如,如果您在类a上声明friend class B;
,则可以在类a上访问类B的属性
我建议您使用第一种方法来维护代码(oopure;)
编辑:当然,如果您通过引用进行访问,则不会浪费任何资源:)
编辑2:在初始化
类上使用一个静态方法,该方法返回no\u个现有设备
并在设备
类上调用初始化::NoOfExistingDevices()
public static int* Initialise::NoOfExistingDevices() {
return &no_of_existing_devices;
}
顺便说一下,我建议您将变量转换为private
好的,根据我的理解:
你不想有一个全球性的
你不想有静电干扰
您不希望在设备
和初始化
还有另一个选项,假设某个东西拥有设备
和初始化
,将现有设备
的no\u移动到那里,然后通过引用此变量来构造设备
和初始化
。此变量是否意味着要成为哪个类包含它的成员字段它取决于一个实例的存在,或者它可以单独存在吗?你可以发布你的代码,以便我们能够更好地理解你试图实现的目标吗?你必须发布更多的代码,以便我们能够理解你希望实现的目标。该问题已用相关两个类的代码更新。