C++ 如何将对象作为参数传递?

C++ 如何将对象作为参数传递?,c++,function,class,friend,borland-c++,C++,Function,Class,Friend,Borland C++,我在这里更改了代码 所有变量都必须保持私有,使用友元函数是一项要求。 这里有两个类A和B,我应该接受5个数字(void enter())。函数average能够访问所有变量并给出平均值。 我知道目前这条线 obj2.average(a,b,c,d,e); 将给出一个错误,因为变量不可访问 所以我的问题是,如何传递最后一行中的变量 #include<iostream.h> #include<conio.h> class A { int a; int b; pu

我在这里更改了代码 所有变量都必须保持私有,使用友元函数是一项要求。 这里有两个类A和B,我应该接受5个数字(void enter())。函数average能够访问所有变量并给出平均值。 我知道目前这条线

 obj2.average(a,b,c,d,e);
将给出一个错误,因为变量不可访问 所以我的问题是,如何传递最后一行中的变量

#include<iostream.h>
#include<conio.h>

class A
{
 int a;
 int b;

 public:
 friend class B;
 int enter1()
 {
  cout<<"enter the value of a and b"<<endl;
  cin>>a>>b;
  return(a,b);
 }
};

class B
{
 int c;
 int d;
 int e;

 public:
 void average(int a, int b, int c, int d, int e)
 {
 float avg;
 avg=((a+b+c+d+e)/5);
 cout<<"average is "<<avg<<endl;
 }

 int enter()
 {
 cout<<"enter the value of c,d,e"<<endl;
 cin>>c>>d>>e;
 return(c,d,e);
 }
 };

void main()
{
 A obj1;
 B obj2;
 obj1.enter1();
 obj2.enter();
 obj2.average(obj1.a,obj1.b,obj2.c,obj2.d,obj2.e);
}
#包括
#包括
甲级
{
INTA;
int b;
公众:
B级朋友;
int enter1()
{
库特布;
报税表(a、b);
}
};
B类
{
INTC;
int d;
INTE;
公众:
无效平均值(整数a、整数b、整数c、整数d、整数e)
{
浮动平均值;
平均值=((a+b+c+d+e)/5);
库特
这里有两个类A和B,我应该接受5个数字(void enter())

显示的两个类有两个成员函数(
enter1
enter
),都返回
int
(如果我理解了问题陈述,则不是beeing
void
),但可能是“错误”的

它(错误地)在
main
中被这样调用

obj2.average(obj1.a, obj1.b, obj2.c, obj2.d, obj2.e);
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   Those are all PRIVATE members,
//                                                    invisible from 'main'
如何将对象作为参数传递

满足所有要求的一种方法是将
average
声明为自由函数,是两个类的朋友(可以访问它们的私有成员),期望有两个const类型的参数引用类a和B

是一种可能的实现,不一定是最佳设计


(1)

您无法访问主函数中的成员变量,因为它们是私有的。 您可以将第一个实例作为参数发送给该方法,然后在该方法中使用class a成员变量

#include<iostream>
using std::cin;
using std::cout;
using std::endl;

class A
{
 int a;
 int b;

 public:
 friend class B;
 int enter1()
 {
  cout<<"enter the value of a and b"<<endl;
  cin>>a>>b;
  return(a,b);
 }
};

class B
{
 int c;
 int d;
 int e;

 public:
 void average(A obj)
 {
 float avg;
 avg=((obj.a+obj.b+c+d+e)/5);
 cout<<"average is "<<avg<<endl;
 }

 int enter()
 {
 cout<<"enter the value of c,d,e"<<endl;
 cin>>c>>d>>e;
 return(c,d,e);
 }
 };

int main()
{
 A obj1;
 B obj2;
 
 obj1.enter1();
 obj2.enter();
obj2.average(obj1);
return 0;
} 
#包括
使用std::cin;
使用std::cout;
使用std::endl;
甲级
{
INTA;
int b;
公众:
B级朋友;
int enter1()
{
库特布;
报税表(a、b);
}
};
B类
{
INTC;
int d;
INTE;
公众:
无效平均值(A obj)
{
浮动平均值;
平均值=((目标a+目标b+c+d+e)/5);

CUT<代码> Obj.a在C++中不是一个有效的函数参数名(这看起来是,尽管您没有标记它),也没有<代码> OB1 NOD>代码> Obj2<代码>在“代码> >输入< /代码>的范围内声明(并且在第一个之后输入错误的操作符)你能从你的代码中提取a并发布它吗?作为一个新用户,也要阅读。请在问题的正文
void average(a obj1.a,a obj1.b,b obj2.c,b obj2.d,b obj2.e)中发布完整的错误消息{}
-这看起来不对。您不需要使用
obj。
感谢您抽出时间回答。您的建议非常有效,感谢您抽出时间。我也尝试了您的答案,结果也非常好!!
obj2.average(obj1.a, obj1.b, obj2.c, obj2.d, obj2.e);
//           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   Those are all PRIVATE members,
//                                                    invisible from 'main'
#include<iostream>
using std::cin;
using std::cout;
using std::endl;

class A
{
 int a;
 int b;

 public:
 friend class B;
 int enter1()
 {
  cout<<"enter the value of a and b"<<endl;
  cin>>a>>b;
  return(a,b);
 }
};

class B
{
 int c;
 int d;
 int e;

 public:
 void average(A obj)
 {
 float avg;
 avg=((obj.a+obj.b+c+d+e)/5);
 cout<<"average is "<<avg<<endl;
 }

 int enter()
 {
 cout<<"enter the value of c,d,e"<<endl;
 cin>>c>>d>>e;
 return(c,d,e);
 }
 };

int main()
{
 A obj1;
 B obj2;
 
 obj1.enter1();
 obj2.enter();
obj2.average(obj1);
return 0;
}