C++有元函式用法及程式碼演示
A:有元函式是普通函式
B:有元函式為類中的成員函式
C:有元類
下面一一介紹。
A:有元函式是普通函式
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
/**********************************************************************
*普通函式作為有元函式
************************************************************************/
using namespace std;
class XFZ{
public:
XFZ(int A):a(A){}
//friend關鍵字後面要接有元函式的型別 這裡為void型別
friend void Friend(XFZ a);//有元函式一定要有引數,引數型別為所在的類,此為XFZ類,即為XFZ a
void print();
private:
int a;
};
void XFZ::print()
{
printf("消費者的數值為%d\n",a);//print函式是在類中,所以可以操縱類中的私有資料
}
void Friend(XFZ N)
{
N.a = 9;//有元函式可以操控類中的私有資料,這是普通函式不能做到的
printf("消費者的數值改為%d\n",N.a);
}
void main()
{
XFZ test(2);
test.print();
Friend(test);
}
B:有元函式為類中的成員函式
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
/**********************************************************************
*XFZ類中的成員函式為SCZ類中的有元函式
************************************************************************/
using namespace std;
class SCZ;//此處不能省略,一旦省略就會報錯,宣告SCZ類
class XFZ{
public:
void Friend(SCZ&);
void print();
};
class SCZ{
public:
SCZ(int a):a(a){}
void print();
void p();
friend void XFZ::Friend(SCZ&);//有元函式
private:
int a;
};
void SCZ::print()
{
printf("我是生產者\n");
}
void XFZ::print()
{
printf("我是消費者\n");
}
void XFZ::Friend(SCZ& A)
{
A.a = 9;
//printf()
}
void SCZ::p()
{
printf("生產者的數值是%d\n",a);
}
void main()
{
SCZ test(2);
XFZ test1;
test.print();
test1.print();
test1.Friend(test);
test.p();
}
C:有元類
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
/**********************************************************************
*XFZ類為SCZ類中的有元類
************************************************************************/
using namespace std;
class SCZ;//此處不能省略,一旦省略就會報錯,宣告SCZ類
class XFZ{
public:
void Friend(SCZ&);
void print();
void xriend(SCZ&);
};
class SCZ{
public:
SCZ(int a):a(a){}
void print();
friend XFZ;//有元函式
private:
int a;
};
void SCZ::print()
{
printf("我是生產者\n");
}
void XFZ::print()
{
printf("我是消費者\n");
}
void XFZ::Friend(SCZ& A)//有元類中的函式都為有元函式,所以都可以訪問私有資料
{
A.a = 9;
printf("生產者的值改為%d\n",A.a);
}
void XFZ::xriend(SCZ& B)
{
B.a = 10;
printf("生產者的值改為%d\n",B.a);
}
void main()
{
SCZ test(2);
XFZ test1;
test.print();
test1.print();
test1.Friend(test);
test1.xriend(test);
}