1. 程式人生 > >C++有元函式用法及程式碼演示

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);
}