为什么加了friend还是无法访问私有成员
#include <iostream>using namespace std;
class Building{
friend void Goodgay::visit2(); //这里声明了友元
public:
string m_SettingRoom = "客厅";
private:
string m_BedRoom = "卧室" ;
};
class Goodgay{
public:
Goodgay();
void visit1();
void visit2(); //visit2可以访问building私有成员
Building *build;
};
Goodgay::Goodgay(){
build = new Building;
}
void Goodgay::visit1(){
cout<<"正在访问Building中的:"<<build->m_SettingRoom<<endl;
}
void Goodgay::visit2(){
cout<<"正在访问Building中的:"<<build->m_BedRoom<<endl;
}
void test01(){
Goodgay g;
g.visit1();
g.visit2();
}
int main(){
test01();
system("pause");
return 0;
} 本帖最后由 xieglt 于 2020-11-12 10:00 编辑
#include <iostream.h>
#include <string>
#include <stdlib.h>
using namespace std;
class Goodgay;
class Building;
class Goodgay{
public:
Goodgay();
~Goodgay();
void visit1();
void visit2(); //visit2可以访问building私有成员
Building * build;
};
class Building
{
friend void Goodgay::visit2(); //这里声明了友元
public:
//可以这样赋值
Building()
{
m_SettingRoom = "客厅";
m_BedRoom = "卧室";
}
public:
string m_SettingRoom; // = "客厅";不能这么赋值
private:
string m_BedRoom; // = "卧室" ;不能这么赋值
};
Goodgay::Goodgay()
{
build = new Building;
}
//注意释放内存
~Goodgay::Goodgay()
{
delete build;
}
void Goodgay::visit1()
{
//cout 不能输出 string 对象,要输出只能输出 string.c_str()
cout << "正在访问Building中的:" << build->m_SettingRoom.c_str() << endl;
}
void Goodgay::visit2()
{
//cout 不能输出 string 对象,要输出只能输出 string.c_str()
cout << "正在访问Building中的:"<< build->m_BedRoom.c_str() << endl;
}
void test01(){
Goodgay g;
g.visit1();
g.visit2();
}
int main(){
test01();
system("pause");
return 0;
} xieglt 发表于 2020-11-12 09:57
不可以在成员变量定义的时候就赋值吗 我看语法好像没问题(虽然我知道构造函数赋值更标准一些) Ryan_Li 发表于 2020-11-12 22:50
不可以在成员变量定义的时候就赋值吗 我看语法好像没问题(虽然我知道构造函数赋值更标准一些)
不能赋值吧。至少我的编译器不支持。
页:
[1]