傳值傳引用的問題

2021-07-04 23:28:17 字數 1801 閱讀 3623

#include

#include

#include

#include

"nicai.h"

#include

using

namespace std;

class fer

private:

int fengzi;

int c;

int fengmu;

public:

void setnumber(fer& we);

void add(fer& a,fer&p);

int yue(int a,int b);

void show();

fer();

int getee();

int fer::getee()

return fengzi;

fer::fer():fengzi(0),fengmu(0),c(1)

void fer::add(fer& a,fer& p)

a.fengzi=a.fengzi*p.fengmu+a.fengmu*p.fengzi;

a.fengmu=a.fengmu*p.fengmu ;

a.yue(a.fengzi,a.fengmu);

couta.fengmu=a.fengmu/c;

coutcoutcin>>we.fengzi;

cin>>we.fengmu;

int fer::yue(int a ,int b)

else

for(c;c>0;c--)

if(a%c==0&b%c==0)

return c;

void main()

fer nicai;

nicai.setnumber (nicai);

fer nihao;

nicai.setnumber(nihao);

nicai.add(nicai,nihao);

cout<

這是一篇很好的關於傳值傳引用方面的例子,書本p411題10,我編的時候碰到了很多的問題。

1剛開始時我把void setnumber(fer& we)寫成void setnumber(fer we);也就是傳值,這樣根本不能改變nicai,nihao這兩個類的值,不能把鍵盤的值傳遞到變數,因為傳值改變的只是setnumber(fer we)函式內部的一些引數

2.同理要明白如果這樣寫void add(fer& a,fer& p);那麼cout<3.最重要的乙個問題來了:看這段**:

void fer::add(fer a,fer p)

a.fengzi=a.fengzi*p.fengmu+a.fengmu*p.fengzi;

a.fengmu=a.fengmu*p.fengmu ;

a.yue(a.fengzi,a.fengmu);

cout《尤其這條語句void fer::add(fera,fer p);當這麼寫時,不管怎麼樣c就是等於1;但是當我這麼寫時void fer::add(fer& a,fer& p)就是正確的,因為在這裡a.yue(a.fengzi,a.fengmu);我用的是a,就是說我執行void fer::add(fer a,fer p)這語句時,我改變的是a的c,而不是nicai.c(主函式我呼叫的是nicai.add(nicai,nihao);而nicai.add(nicai,nihao這語句操作的是nicai,,所以cout《並且既然我沒改變nicai.c當然就是初始值1,解決方法1. fer::add(fer& a,fer& p)。解決方法2:把a.yue(a.fengzi,a.fengmu)改為yue(a.fengzi,a.fengmu),這樣預設的就是nicai.

傳值 傳值引用

首先對傳值和傳引用要有個基本的概念 傳值 傳遞的是值的副本。方法中對副本的修改,不會影響到呼叫方。傳引用 傳遞的是引用的副本,共用乙個記憶體,會影響到呼叫方。此時,形參和實參指向同乙個記憶體位址。對引用副本本身 物件位址 的修改,如設定為null,重新指向其他物件,不會影響到呼叫方。直接上 更好的理...

傳值 傳引用 傳指標

收藏 相關概念 c 三種傳遞引數方式 傳引數的值 稱值傳遞,簡稱傳值 傳引數的位址 稱位址傳遞,簡稱為傳址 和引用傳遞 稱為傳引用 相應的函式傳值呼叫,傳址呼叫和傳引用呼叫 形參 實參 函式定義時參數列中的引數稱為形式引數,簡稱形參 函式呼叫時參數列中的引數稱為實際引數,簡稱實參。實參和形參之間的資...

傳值 傳引用 傳指標

相關概念 c 三種傳遞引數方式 傳引數的值 稱值傳遞,簡稱傳值 傳引數的位址 稱位址傳遞,簡稱為傳址 和引用傳遞 稱為傳引用 相應的函式傳值呼叫,傳址呼叫和傳引用呼叫 形參 實參 函式定義時參數列中的引數稱為形式引數,簡稱形參 函式呼叫時參數列中的引數稱為實際引數,簡稱實參。實參和形參之間的資料傳遞...