2017-05-20 84 views
1

setwidth()是類Box的成員函數,它也是Sbox類的朋友函數,它設置兩個類的成員width的值。作爲另一個類的成員函數的朋友函數設置值

Sboxwidth的值未正確設置/顯示。

#include<iostream> 

using namespace std; 

class Sbox; 

class Box{ 
    private: 
     double width; 
    public: 
     friend void printwidth(Box box); 
     void setwidth(Sbox sbox, double wid); 
}; 

class Sbox { 
    private: 
     double width; 
    public: 
     friend void Box::setwidth(Sbox sbox, double wid); 
     void printwidth() { 
      cout << "the width of small box: " << width; //this value is coming wrong 
     } 
}; 

void Box::setwidth(Sbox sbox, double wid) { 
    width = wid; 
    sbox.width = wid; 
} 

void printwidth(Box box) { 
    cout << "width of the box: " << box.width << endl; 
} 

int main() { 
    Box box; 
    Sbox sbox; 
    box.setwidth(sbox, 10.77); 
    printwidth(box); 
    sbox.printwidth(); 
    return 0; 
} 

回答

1

您需要通過引用傳遞Sbox。將這個符號添加到這三行中。

void setwidth(Sbox& sbox,double wid);

friend void Box::setwidth(Sbox& sbox,double wid);

void Box::setwidth(Sbox& sbox,double wid)

你是通過你的sbox由值,這意味着複印的內部setwidth使用的正確性。然後,您的代碼將更改該副本的寬度sbox,但副本將在setwidth的末尾銷燬,並且功能外部的原始sbox保持不變。

添加&Sbox參數按引用傳遞,這意味着一個拷貝決不製成,並且因此內部setwidthsbox是相同的對象外的一個。

有一個在這裏讀:How to pass objects to functions in C++?

+1

它的工作,謝謝 – falco97

相關問題