c++ 基础知识-类和对象-友元
1.全局函数做友元
#include
#include
using namespace std;
class Person
{
//利用friend修饰函数构造友元函数,可以访问类内私有成员
friend void test(Person * p);
public:
void fun()
{
m_age = 25;
m_ID = 123;
cout<<"fun()"<
cout<m_ID<m_age<
Person p;
p.fun();
test(&p);
return 0;
}
2.友元类
#include
#include
using namespace std;
class Person
{
//声明友元
friend class Student;
public:
//构造函数
Person();
//析构函数
~Person();
public:
int m_age;
private:
int m_ID;
};
Person::Person()
{
this->m_age = 1;//有无this都可以
this->m_ID = 123456;//有无this都可以
}
Person::~Person()
{
cout<<"Person() : 析构函数"<
//friend class Person;
public:
//构造函数
Student();
~Student();
void visit();
private:
Person * person;
};
Student::Student()
{
person = new Person;//
}
Student::~Student()
{
cout<<"Student() : 析构函数"<
cout<m_age<m_ID<
//Person p;
Student s;
s.visit();
}
int main()
{
//特别注意这种调用方式,类和调用都写在main函数外面,main内部只写一些简单的
fun();
return 0;
}
3.成员函数做友元
注意访问顺序
#include
#include
using namespace std;
class Person;//注意先声明Person
class Student
{
//friend class Person;
public:
//构造函数
Student();
~Student();
void visit();
private:
Person * person;
};
class Person
{
//声明友元类
//friend class Student;
friend void Student::visit();
public:
//构造函数
Person();
~Person();
public:
int m_age;
private:
int m_ID;
};
Person::Person()
{
this->m_age = 1;
this->m_ID = 123456;
}
Person::~Person()
{
cout<<"Person() : 析构函数"<
person = new Person;//
}
Student::~Student()
{
cout<<"Student() : 析构函数"<
cout<m_age<m_ID<
//Person p;
Student s;
s.visit();
}
int main()
{
//特别注意这种调用方式,类和调用都写在main函数外面,main内部只写一些简单的
fun();
return 0;
}