64,642
社区成员
发帖
与我相关
我的任务
分享
/* 谢谢你的文章,明白了友元。
去掉friend后,我发现,first() {} 设置为private后,在创建second对象时,因为first obj是类类型成员,所以编译器尝试调用它的默认构造函数,因为构造函数私有所以失败,编译器又不没有合成,所以提示错误,这样理解对吗?
另外: first(int ival);
或者
first(int ival)
{
this->ival = ival;
}
在创建second对象是,编译器也尝试调用默认构造函数,发现构造函数是私有的,并且形参和实参个数不匹配,所以提示没有合适的构造函数。这样理解对吗?
我8楼给出的代码,加上friend class second后。
class second
{
first obj;
public:
void print()
{
obj.print();
}
};
second类的所有成员函数,可以访问first的所有成员,但是first() {}这个是私有的,
first obj这个obj应该不能创建吧?
不可能是因为,obj在void print()这个函数中,当obj调用first的print成员函数的时候,
才调用first的构造函数创建的对象?
我单独first object这样就提示不能访问私有数据。
再次谢谢你,多次的帮助我!
/*这就是我改后的情况,,,确实没报错...
但是如果改成,
first(int ival);
或者
first(int ival)
{
this->ival = ival;
}
就会报错,,请问这是什么情况?? 麻烦你再帮下我.谢勒..*/
class first
{
private:
first() {}
int ival;
public:
friend class second;
void print()
{
cout << ival << endl;
}
};
class second
{
first obj;
public:
void print()
{
obj.print();
}
};
#include <iostream>
using namespace std;
class first
{
private:
first(int ival);
int ival;
public:
void print()
{
cout << ival << endl;
}
};
class second
{
first obj;
public:
void print()
{
obj.print();
}
};
int main(void)
{
second s;
s.print();
return 0;
}