所以我有使用编程语言的经验,只是切换到C ++。现在我已经创建了一些有用的应用程序,但我总是偶然发现同样的问题。我并不完全知道代码中的所有内容。你有一个明显可见的课程,因为它已经写好了。你还有一些附加到类的函数是这些被调用的实例吗?并且该类是它所引用的对象,例如class :: function。
但我的主要问题是如何从同一个类文件中的另一个函数访问变量。我在下面举了一个例子来解释我想要实现的目标。我已经尝试了很多东西并且搜索了很多东西。我尝试了代码粘贴代码创建设置和获取函数,调用类来获取和设置变量,但我不能让它工作。我花了很多时间来解决这个非常基本的问题。有人可以解释一下这段代码中的内容(类,对象,实例)。并向我解释从同一.cpp文件中的另一个函数接收数据的最有效方法。
由于
load_data.h
#pragma once
class load_data
{
public:
static int data[13];
load_data();
static void test2();
};
load_data.cpp
#include "load_data.h"
#include "abc.h"
load_data::load_data()
{
int data[3]; // Initializing the array
data[0] = abc::LoadImage("textures/1.png");
data[1] = abc::LoadImage("textures/2.png");
data[2] = abc::LoadImage("textures/3.png");
}
void load_data::test2()
{
abc::CreateSprite(1, data[0]);
abc::SetSpritePosition(1, 0, 0);
abc::SetSpriteScale(1, 3, 3);
// Now I get an error saying it has no data. Which however is set in
// load_data(). But since each function gets its own variables this one will be empty.
abc::CreateSprite(2, data[1]);
abc::SetSpritePosition(2, 64, 64);
abc::SetSpriteScale(2, 3, 3);
abc::CreateSprite(3, data[2]);
abc::SetSpritePosition(3, 128, 128);
abc::SetSpriteScale(3, 3, 3);
}
答案 0 :(得分:2)
将 load_data()
构造函数更改为以下内容(目前,您正在创建一个新的 data[]
变量,该变量本地作用于您的 load_data()
构造函数,它被初始化而不是您的对象 data[]
(得到"黯然失色")。 test2()
访问 data[]
时失败,因为另一个本地 data[]
已初始化。 ,fyi,当 data[]
返回时,本地 load_data()
会被销毁(因为它是一个超出范围的auto / stack变量)。< / p>
load_data::load_data()
{
//int data[3]; // Initializing the array
data[0] = abc::LoadImage("textures/1.png");
data[1] = abc::LoadImage("textures/2.png");
data[2] = abc::LoadImage("textures/3.png");
}
你还有一些附加到这类的功能 叫做实例?
对象是类的实例。类定义了对象类型,它由状态变量和它们的操作组成(称为&#34;成员函数&#34;或&#34;方法&#34;)。
通过实例的句柄调用对象的方法。 IE,一个实例化的变量:
load_data ld = new load_data();
ld.test2();
例如,它所引用的对象是类 类::功能。
此表示法用于明确限定方法名称。它有助于解决命名冲突,只应在需要时使用(否则它是隐式的)。
但我的主要问题是如何从另一个访问变量 函数在同一个类文件中。 ... 但是因为每个函数都有自己的变量,所以这个变量是空的
类的所有函数共享类&#es;(成员)变量。该类的给定实例具有这些成员变量的唯一副本(即,它们对该实例的特定值/内存),因此所有方法都通过特定实例变量调用(例如 ld
) load_data
会引用相同的 data[]
数组(因此 load_data ld1, ld2
会有自己的副本)。函数可以并且通常会声明它们自己的变量,以帮助计算它们执行的任务(bool,counter等...)。如前所述,这些变量的作用域是该函数,这意味着它们不再被分配并在函数返回时被销毁(它们是自动变量)。
答案 1 :(得分:0)
你还有一些附加在课堂上的功能 这些被称为实例?
没有。类中的函数称为“类成员函数”或只是“成员函数”。实例是内存中该对象(读取类)的副本。简而言之:
class A {
public:
void fun (void); ///< This is a class member function
};
void main (int argc, char *argv[]) {
A a; ///< a is an instance of object A
}
例如,它所引用的对象是类 类::功能。
该类定义了该对象。在上面的剪辑中,A是一个对象。
但我的主要问题是如何从另一个访问变量 在同一个类文件中运行。
您需要对变量范围进行一些阅读。在上面的示例中,数据数组是构造函数的本地数据。它不存在于对象内,仅在该函数内。因此,一旦构造函数完成,变量就会超出范围而丢失。为了将它保存在对象的范围内,您需要在对象中声明它。
class load_object {
public:
// The same
private:
int load[3];
};
干杯