[英]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.