无法存储任何值

时间:2017-10-24 18:56:00

标签: c++ friend-function

我最近开始学习C ++,做一些简单的类/朋友函数练习,我试图做的是,通过使用友元函数从用户获取2个数字,然后再使用友元函数,将这2个数字相乘并显示在屏幕上。让我们说我按顺序输入了2,3,4,5。预期的输出是6和20,但我只能在屏幕上看到0和0。

#include<iostream>
using namespace std;

class iluvcpp {
    int no_1, no_2;
public:
    iluvcpp(){}
    ~iluvcpp(){}
    friend void inputno(iluvcpp obj);
    friend int multiply(iluvcpp obj);
}multi_1, multi_2;

void inputno(iluvcpp obj) {

    cout <<"Enter no 1: ";
    cin >> obj.no_1;
    cout <<"Enter no 2: ";
    cin >> obj.no_2;
}
int multiply(iluvcpp obj) {
    return ((obj.no_2)*(obj.no_1));
}

int main() {
    inputno(multi_1);
    inputno(multi_2);   
    cout << multiply(multi_1) <<"   "<< multiply(multi_2);

    cout << endl;
    system("pause");
    return 0;
}

3 个答案:

答案 0 :(得分:6)

您按值传递对象,这意味着当您致电inputno时,您正在处理副本。尝试将函数签名更改为:

void inputno(iluvcpp& obj) {
  ...
}

Here's an explanation,其中包含按值和按引用传递参数的示例。

答案 1 :(得分:1)

2条建议:

默认情况下,类的变量/方法是私有的。如果您熟悉变量,也可以将变量no_1和no_2公开,或者写一个setter。要在默认情况下公开它们,请使用struct而不是class。

正如其他人已经指出的那样,您并未直接修改multi_1和multi_2。要么通过引用传入它们(orip的答案正好提到),要么让它们返回这个iluvcpp obj对象并将它们称为:

multi_1 = inputno(multi_1);

答案 2 :(得分:0)

void inputno(iluvcpp obj)有一个名为obj的参数,没有返回值。这是错误的方法,inputno并不需要main中的任何内容,但它应该返回一些内容:

iluvcpp inputno(void) { ...或(等效)iluvcpp inputno() { ...

您最后需要return something;语句,因此C ++知道从inputno返回的值。