不能存储任何值
Can not store any value
我最近开始学习 C++,做了一些简单的 class/friend 函数练习,我想做的是,通过使用友元函数从用户那里为 class 的 2 个对象获取 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;
}
您按值传递对象,这意味着当您调用 inputno
时您正在处理一个副本。尝试将函数签名更改为:
void inputno(iluvcpp& obj) {
...
}
Here's an explanation 以及有关按值传递参数与按引用传递参数的示例。
2条建议:
class 的 variable/method 默认是私有的。也可以使您的变量 no_1 和 no_2 public,或者写一个 setter,如果您熟悉的话。要让它们默认为 public,请使用 struct,而不是 class.
正如其他人已经指出的那样,您没有直接修改 multi_1 和 multi_2。要么让它们通过引用传递(orip 的答案恰好提到了这一点),要么使它们成为 return 这个 iluvcpp obj 对象并像这样称呼它们:
multi_1 = inputno(multi_1);
void inputno(iluvcpp obj)
有一个名为 obj
的参数,没有 return 值。这是错误的方式,inputno
不需要 main
的任何东西,但它应该 return 一些东西:
iluvcpp inputno(void) { ...
或(等价)iluvcpp inputno() { ...
.
最后需要一个 return something;
语句,这样 C++ 就知道 inputno
到 return 的值是什么。
我最近开始学习 C++,做了一些简单的 class/friend 函数练习,我想做的是,通过使用友元函数从用户那里为 class 的 2 个对象获取 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;
}
您按值传递对象,这意味着当您调用 inputno
时您正在处理一个副本。尝试将函数签名更改为:
void inputno(iluvcpp& obj) {
...
}
Here's an explanation 以及有关按值传递参数与按引用传递参数的示例。
2条建议:
class 的 variable/method 默认是私有的。也可以使您的变量 no_1 和 no_2 public,或者写一个 setter,如果您熟悉的话。要让它们默认为 public,请使用 struct,而不是 class.
正如其他人已经指出的那样,您没有直接修改 multi_1 和 multi_2。要么让它们通过引用传递(orip 的答案恰好提到了这一点),要么使它们成为 return 这个 iluvcpp obj 对象并像这样称呼它们:
multi_1 = inputno(multi_1);
void inputno(iluvcpp obj)
有一个名为 obj
的参数,没有 return 值。这是错误的方式,inputno
不需要 main
的任何东西,但它应该 return 一些东西:
iluvcpp inputno(void) { ...
或(等价)iluvcpp inputno() { ...
.
最后需要一个 return something;
语句,这样 C++ 就知道 inputno
到 return 的值是什么。