簡體   English   中英

如何從類中的另一個函數訪問變量

[英]How to access the variable from another function in a class

因此,我有使用編程語言的經驗,並且剛切換到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);

}

將您的load_data()構造函數更改為以下內容(當前,您正在創建一個新的data[]變量,該變量在本地范圍內屬於您的load_data()構造函數,該變量將被初始化,而不是對象的data[] (得到“ eclipsed”)。訪問test2()時訪問data[]失敗,因為另一個本地data[]被初始化。此外,也有一點,當load_data()返回時,本地data[]被銷毀(因為它是一個auto / stack變量,超出范圍)。

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");
}

您還為類附加了某種功能,這些功能稱為實例嗎?

對象實例 一個類定義對象類型,該對象類型由狀態變量和對其進行的操作(稱為“成員函數”或“方法”)組成。

通過實例的句柄調用對象的方法。 IE,實例化變量:

load_data ld = new load_data();
ld.test2();

類是它所引用的對象,例如class :: function。

該符號用於明確限定方法名稱。 它有助於解決命名沖突,僅應在需要時使用(否則它是隱式的)。

但是我的主要問題是如何從同一類文件中的另一個函數訪問變量。 ...但是由於每個函數都有自己的變量,因此該變量將為空

類的所有功能共享該類的(成員)變量。 類的給定實例具有這些成員變量的唯一副本(即,該成員變量的特定值/內存),因此,通過load_data的特定實例變量(例如ld )進行的所有方法調用load_data將引用相同的data[]數組(因此load_data ld1, ld2每個都有自己的副本)。 函數通常可以聲明自己的變量,以幫助計算它們執行的任務(布爾,計數器等)。 如前所述,這些變量的作用域是該函數,這意味着它們不再分配並在函數返回時被銷毀(它們是自動變量)。

而且您還向該類附加了某種功能,這些功能稱為實例嗎?

不。類內部的函數稱為“類成員函數”或僅稱為“成員函數”。 實例是該對象(讀取類)在內存中的副本。 簡而言之:

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
}

類是它所引用的對象,例如class :: function。

該類定義對象。 在上面的片段中,A是一個對象。

但是我的主要問題是如何從同一類文件中的另一個函數訪問變量。

您需要對可變范圍進行一些閱讀。 在上面的示例中,數據數組在構造函數中是本地的。 它不存在於對象中,僅存在於該函數中。 因此,一旦構造函數完成,變量就會超出范圍並丟失。 為了使其保持在對象范圍內,您需要在對象內聲明它。

class load_object {
public:
  // The same
private:
  int load[3];
};

干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM