欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c/c++ 友元基本概念

程序员文章站 2022-03-18 15:37:05
友元基本概念: 1,把一个一般函数声明为一个类的友元函数 2,把一个类A的某几个成员函数声明为某个类B的友元函数 3,把一个类A声明为一个类B的友元类。 友元的作用:可以访问类B里所有的成员变量和成员方法,不管是public,protected,还是private。 1,把一个一般函数show声明为 ......

友元基本概念:

1,把一个一般函数声明为一个类的友元函数

2,把一个类a的某几个成员函数声明为某个类b的友元函数

3,把一个类a声明为一个类b的友元类。

友元的作用:可以访问类b里所有的成员变量和成员方法,不管是public,protected,还是private。

1,把一个一般函数show声明为一个类的友元函数

#include <iostream>
using namespace std;

class test{
  friend void show(const test &t);
public:
  test(int d = 0) : data(d){}
private:
  void fun()const{
    cout << "fun:" << data << endl;
  }
  int data;
};

//友元,即可以访问私有成员变量,也可以访问私有方法                 
void show(const test &t){
  cout << "friend of test:" << t.data << endl;
  t.fun();
}

int main(){
  test t(100);
  show(t);

  return 0;
}

2,把一个类a的fun成员函数声明为类test的友元函数,但是类a的fun1函数不是类test的友元函数,所以在fun1里不能够访问test的私有成员。

#include <iostream>
using namespace std;

class test;

class a{
 public:
  a(int d = 0) : data(d){}
  void fun(const test &t);
  void fun1(const test &t);

 private:
  int data;
};

class test{
  friend void a::fun(const test &t);
public:
  test(int d = 10) : data(d){}
private:
  int data;
};

void a::fun(const test &t){
  cout << t.data << endl;
}
void a::fun1(const test &t){
  //编译不能通过,因为fun1不是class test的友元函数。               
  //cout << t.data <<endl;                                         
}
int main(){
  test t(100);
  a a;
  a.fun(t);
}

3,把类b声明为一个类test的友元类,因此,类b的所有public成员函数都是类test的友元函数。

#include <iostream>
using namespace std;

class test;

class b{
public:
  void fun1(const test &t);
  void fun2(const test &t);
};

class test{
  friend class b;
public:
  test(int d = 0) : data(d){}
private:
  void pri()const{
    cout << "pri" << endl;
  }
  int data;
};

void b::fun1(const test &t){
  cout << t.data << endl;
}
void b::fun2(const test &t){
  t.pri();
}

int main(){
  test t(10);
  b b;
  b.fun1(t);
  b.fun2(t);
}