1.先不把类设置为友元。
通过在person类中定义的building类型的指针来把两个类连接起来。
#include <iostream>
#include<string>
using namespace std;
class building {
public:
string m_bed;
building() {
this->m_bed = "卧室";//加不加this都可以,不加this的话系统会为我们自动加上,意思就是指向当前调用的对象
this->m_pub = "客厅";
}
private:
string m_pub;
};
class person{
public:
person(){
build=new building; //person类中定义了一个building类型的指针,并在person的构造函数中为这个指针申请了一块内存空间。
}
void visit(){
cout<<build->m_bed<<endl;
cout<<build->m_pub<<endl;
}
private:
building *build;
};
int main() {
person p;
p.visit();
}
报错信息如下图所示:
2.再把类设置为友元的情况。
#include <iostream>
#include<string>
using namespace std;
class building {
public:
friend class person;//设置友元
string m_bed;
building() {
this->m_bed = "卧室";
this->m_pub = "客厅";
}
private:
string m_pub;
};
class person{
public:
person(){
build=new building;
}
void visit(){
cout<<build->m_bed<<endl;
cout<<build->m_pub<<endl;
}
private:
building *build;
};
int main() {
person p;
p.visit();
}
结果正常:
3.和上边的知识点其实关系不大,加入这个例子是为了复习几个小知识点
#include <iostream>
#include<string>
using namespace std;
class building {
public:
string m_bed;
building(string name1,string name2) {
m_bed =name1;
m_pub = name2;
}
string get_m_pub() {
return m_pub; //当数据成员为私有时,我们要想在类外可以访问的话就加一个这样的函数就行。
}
private:
string m_pub;
};
int main() {
building p1("隆通", "牛少");
building* p =new building(p1);//这里不用特别加上取址符,因为new的自带性质就包含了取址操作,这两句话也可以这样写
//1.building p1("隆通", "牛少"); building *p;
//2.p = new building(p1);
cout<<p->m_bed;
cout << p->get_m_pub();//通过get函数访问类的私有成员,私有成员类内可以随便访问,但是出了类就不行了,得使一些技巧才行。
delete p;
}