#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 三種傳遞引數方式 傳引數的值 稱值傳遞,簡稱傳值 傳引數的位址 稱位址傳遞,簡稱為傳址 和引用傳遞 稱為傳引用 相應的函式傳值呼叫,傳址呼叫和傳引用呼叫 形參 實參 函式定義時參數列中的引數稱為形式引數,簡稱形參 函式呼叫時參數列中的引數稱為實際引數,簡稱實參。實參和形參之間的資料傳遞...