码迷,mamicode.com
首页 > 编程语言 > 详细

c/c++ 友元基本概念

时间:2018-08-19 22:40:43      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:ted   return   私有   概念   std   turn   pre   基本   int   

友元基本概念:

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

c/c++ 友元基本概念

标签:ted   return   私有   概念   std   turn   pre   基本   int   

原文地址:https://www.cnblogs.com/xiaoshiwang/p/9502990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!