如何从类中的另一个函数访问变量

时间:2017-03-24 20:02:40

标签: c++

所以我有使用编程语言的经验,只是切换到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);

}

2 个答案:

答案 0 :(得分:2)

load_data() 构造函数更改为以下内容(目前,您正在创建一个新的 data[] 变量,该变量本地作用于您的 load_data() 构造函数,它被初始化而不是您的对象 data[] (得到&#34;黯然失色&#34;)。 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];
};

干杯