我在名爲Man的類中有一個名爲update的方法。在我的main.cpp中我打電話:將變量傳遞給類方法
int age=0;
Man person;
person.Update(age);
這會更新方法中的人的年齡。但是,當我回到主文件時,它沒有更新的年齡。所以變量是在類方法中設置的,但沒有回到main.cpp上下文。
EDIT
Man::Update(int age)
{
age++;
}
我在名爲Man的類中有一個名爲update的方法。在我的main.cpp中我打電話:將變量傳遞給類方法
int age=0;
Man person;
person.Update(age);
這會更新方法中的人的年齡。但是,當我回到主文件時,它沒有更新的年齡。所以變量是在類方法中設置的,但沒有回到main.cpp上下文。
Man::Update(int age)
{
age++;
}
對於一個變量的改變將被反射回在呼叫範圍,對變量的引用必須被傳遞給函數。當通過引用時,函數範圍中的變量有效地指/調用範圍中的變量。
Man::Update(int &age) //The ampersand reflects that it is a reference
{
age++;
}
你在做什麼叫做傳值。在這種情況下,變量的新副本將在函數作用域中創建,並且所做的任何更改都不會反映回調用作用域中。
看看這個detailed explanation和這個爲Q&A style explanation。
但是,您在這種特定情況下所做的事情,根本不需要類或成員函數。它可以使用單個正常的函數完成。
void Man::Update(int & age)
{
age++;
}
它應該工作
您正在通過值傳遞age
參數。這意味着它被複制到功能Update
中並且該副本被修改。您需要通過引用來傳遞參數。這很容易在C++中完成,因爲它提供了引用類型。引用類型的名稱充當它綁定到的對象的別名。所有你需要做的就是添加一個號(&
)你的類型:
void Man::Update(int& age)
{
age++;
}
當你做person.Update(age);
你的對象age
綁定到你的函數參考age
。
其他人可能會給你一個使用指針的替代方法(帶一個int*
參數並將&age
傳遞給該函數)。這是如何在C中完成的 - 但我們不寫C,不要讓他們欺騙你!採用引用類型比使用指針更安全,更有表現力。
但是,我問你爲什麼有一個類叫Man
和age
不是Man
的成員。類是將相關數據作爲對象存儲在一起的一種方法。我會認爲年齡是代表男性的數據的一部分。
這只是一個例子 – joncodo
這是一個反模式的例子。 –
我們需要查看「person :: update」的代碼 –
Update()是否需要引用?我猜不是。 – JasonD
你是指什麼意思? – joncodo