爱上c++的第四天(核心课程):类和对象--友元

简介: 爱上c++的第四天(核心课程):类和对象--友元

你的c++学习路上明灯


好吧,我承认了,我是懒虫,我其实很想狡辩一下,咳咳,还是好好认错吧。好久没有更新了,说实话,越玩越觉得空虚,还不如好好学习学习。


前两天看了一部两年前的电影,真的是很不错的,推荐给大家。

大学_电影_高清1080P在线观看平台_腾讯视频 (qq.com)

https://v.qq.com/x/cover/mzc00200mts74tj/d0040jfkpzp.html

我觉得这个是一部很有教育意义的电影,真的体会到了什么叫做对那些伟大的学者的敬仰,什么叫做努力,什么叫做坚持,什么叫做对自己过往的悔恨。大家可以看一看。


好了,我们开始今天的学习。


#一,友元


友元的目的就是让一个函数或类访问另一个类的私有成员


de6996afaa2c4008a6f6416ac26b9e32.png


##一,全局函数做友元


#define _CRT_SECURE_NO_WARNINGS 1
#include<string>
#include<iostream>
using namespace std;
class Building {
  //告诉编译器,GoodGay这个全局函数是Building类的友元
  friend void GoodGay(Building& p);
public:
  Building() {
    m_sitroom = "客厅";
    m_bedroom = "卧室";
  }
  string m_sitroom;
private:
  string m_bedroom;
};
void GoodGay(Building &p) {
  cout << "GoodGay正在访问:" << p.m_sitroom << endl;
  cout << "GoodGay正在访问:" << p.m_bedroom << endl;
}
void test1() {
  Building p;
  GoodGay(p);
}
int main() {
  test1();
  return 0;
}


##二,类做友元


#define _CRT_SECURE_NO_WARNINGS 1
#include<string>
#include<iostream>
using namespace std;
class Building {
  //用类做友元
  friend class GoodGay;
public:
  string m_sitroom;
  Building();
private:
  string m_bedroom;
};
class GoodGay {
public:
  void visit();//参观函数,访问Building中的属性
  Building* building=new Building;
};
//在类外写成员函数
//成员函数可以在类内写,也可以在类外写
Building::Building() {
  m_sitroom = "客厅";
  m_bedroom = "卧室";
}
void GoodGay::visit() {
  cout << "GoodGay正在访问:" << building->m_bedroom << endl;
  cout << "GoodGay正在访问:" << building->m_sitroom << endl;
}
void test1() {
  GoodGay gg;
  gg.visit();
}
int main() {
  test1();
  return 0;
}


##三,成员函数做友元  


#define _CRT_SECURE_NO_WARNINGS 1
#include<string>
#include<iostream>
using namespace std;
class Building;
class GoodGay {
public:
  void visit();
  void visit2();//让第一个可以访问私有属性,visit2不行
  Building* building;//未定义Building类,所以要先声明,只有用成员函数做友元才需要,不懂为什么。用类做友元还不需要这么麻烦的。
  GoodGay();
};
class Building {
  //用成员函数做友元
  friend void GoodGay::visit();
public:
  string m_sitroom;
  Building();
private:
  string m_bedroom;
};
//在类外写成员函数
//成员函数可以在类内写,也可以在类外写
GoodGay::GoodGay() {
  building = new Building;
}
Building::Building() {
  m_sitroom = "客厅";
  m_bedroom = "卧室";
}
void GoodGay::visit() {
  cout << "GoodGay正在访问:" << building->m_bedroom << endl;
  cout << "GoodGay正在访问:" << building->m_sitroom << endl;
}
void GoodGay::visit2() {
  //cout << "GoodGay正在访问visit2:" << building->m_bedroom << endl;
  cout << "GoodGay正在访问visit2:" << building->m_sitroom << endl;
}
void test1() {
  GoodGay gg;
  gg.visit();
  gg.visit2();
}
int main() {
  test1();
  return 0;
}
目录
相关文章
|
5天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
15 4
|
5天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
15 4
|
5天前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
10 1
|
6天前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
13 0
|
15天前
|
存储 编译器 C++
【C++类和对象(下)】——我与C++的不解之缘(五)
【C++类和对象(下)】——我与C++的不解之缘(五)
|
15天前
|
编译器 C++
【C++类和对象(中)】—— 我与C++的不解之缘(四)
【C++类和对象(中)】—— 我与C++的不解之缘(四)
|
17天前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
22 3
|
17天前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
20 2
|
17天前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
49 1
|
17天前
|
编译器 C语言 C++
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
C++入门4——类与对象3-1(构造函数的类型转换和友元详解)
15 1