在学习友元函数的时候,我在Test类里面定义了一个函数brint()需要访问student的里面的私有成员,然后在student里面声明了友元函数,但是只有在把Test的定义放在student的定义之前才不会报错,放在后面就会报错(无法访问私有成员),无论如何提前声明Test类。使用友元类没有这样的问题。
#include <iostream>
#include <cstring>
using namespace std;
//类的前向声明
class Test;
class student
{
public:
student(double m);
~student();
private:
friend void Test::brint(student &a);
double y;
};
class Test
{
public:
Test();
Test(int a);
Test(const Test&t);
~Test(); //析构函数
void brint(student &a);
private:
friend void Print(Test &a, Test &b);
int x;
};
student::student(double m)
{
y = m;
}
student::~student()
{
}
void Test::brint(student &a)
{
double m = a.y;
cout << m;
}
Test::Test()
{
}
Test::Test(int a)
{
x = a;
}
Test::Test(const Test&t)
{
x = t.x;
}
Test::~Test()
{
}
void Print(Test &a, Test &b)
{
cout << a.x<<'\0'<<b.x << '\0' <<a.x*b.x;
}
int main()
{
Test a(10);
Test b(3);
Test c(b);
student d(3.1415);
//Print(c, b);
a.brint(d);
return 0;
}