2014-01-10 42 views
0

我有这样的功能:如何将同一个类中的两个值从一个函数传递给另一个函数?

void fraction::init() 
{ 
    cout<<"enter the values for the numerator and denominator\n"; 
    cin>>num; 
    cin>>denom; 
} 

,我想在操纵他们另一个函数中使用这两个数字。 我该如何把他们带到这个其他功能? 注意:这两个函数都是相同的类。

+0

老实说,这个问题说明你缺乏依据关于类是如何工作的,应当使用因为,试着找一本好书。 – Antonio

回答

4

简单地将它们定义为类的成员:

class fraction { 
private: 
    int num; 
    int denom; 

public: 
    void init();   // has access to num and denom 
    void otherMethod(); // also has access to num and denom 
}; 

你也应该不依赖于init()被调用到初始化变量有默认值,你也应该不依赖于各种默认初始化由C++提供,参见Default variable value

相反,添加一个构造函数,用于设置变量的默认值,以确保已创建类的对象之后,这些变量的合理值。然后,你仍然可以调用init()设置任何你想要的值(也许你应该重新命名init()为类似readValues(),以反映该方法确实)。

-1

这取决于你将如何使用这些功能。由于都属于同一类,可以使类numdenom(私有)的成员。但如果这些值来自课外,也可以使用引用。不管这将工作的属于同一类或没有的功能:

class fraction 
{ 
public: 
    void init(int& num, int& denom) const; 
    void otherFunction(int num, int denom); 
} 

void fraction::init(int& num, int& denom) const 
{ 
    cout<<"enter the values for the numerator and denominator\n"; 
    cin>>num; 
    cin>>denom; 
} 

// Define otherFunction() appropriately 

然后在另一段代码使用这些功能:

// ... 
int aNum, aDenom; 
fraction fr; 
fr.init(aNum, aDenom); 
fr.otherFunction(aNum, aDenom); 
// ... 
+0

你建议的最终用途可能是正确的,但是这是非常危险的,这是真的表明,在这种特殊情况下成员变量(初始化一次一小部分必须拥有自己的分子和分母) – Antonio

+0

@Antonio的情况:如果'fraction'是真的一个分数,'num'和'denom'是它的分子和分母,那么显然它们应该是数据成员。但是,在这种情况下,问题仅仅是面向对象编程的绝对基础。所以我宁愿不考虑这些名称的可能含义,并认为这只是一个设计不当的例子。 – Gorpik

+1

“面向对象编程的绝对基础”通常指出Init函数是坏消息。 –

-1

要么让他们的类的成员,那么多建议,或者你可以尝试在需要时传递它们。如果你想让它们的值反映变化,请通过引用传递它们。

datatype function1(int *a, int *b) 

然后当你由init调用它们()函数,

function1(&num, &denom) 

希望这有助于

+2

使用指针引用传递的这种方式是类似C,检查以前的答案的例子,知道如何正确地做它在C++ – Antonio

相关问题