当前位置: 首页 > news >正文

C++核心编程和桌面应用开发 第六天(this指针 友元)

目录

1.this指针

1.1C++中空类的大小

1.2类中成员的存储方式

1.3this指针

1.3.1常函数

1.3.2常对象

2.友元

2.1全局函数做友元

2.2类做友元

2.3成员函数做友元


1.this指针

1.1C++中空类的大小

1.2 类中成员的存储方式

1.3this指针

this指针指向被调用的成员函数所属的对象,本质是一个指针常量,指针的指向不可修改,指针指向的值可以修改。

注意:静态成员函数内部没有this指针, 静态成员函数不能操作非静态成员变量。

class Person
{
public:Person(int age){this->age = age;}Person& myPerson(Person& p){this->age=this->age+p.age;//返回自身对象return *this;}int age;
};

空指针可以调用类内的成员函数,但是若类内用到this指针则不能

1.3.1常函数

函数的形参列表后加const关键词,修饰this指针,指针指向的值指针的指向都不可以修改。

关键字mutable会让成员变量在常函数中也可以修改

1.3.2常对象

对象前加const关键字修饰对象

const Person p1;
  • 常对象无法修改成员属性;常函数无法修改成员属性
  • 常对象可调用常函数,无法调用普通成员函数。

关键字mutable会让常对象也可以修改自身属性

2.友元

友元是一种特权函数或类,这个特权函数或类可以访问私有成员

2.1全局函数做友元

class Room
{
//全局函数声明为友元函数,即可访问私有变量
friend void goodFriend(Room& room);public:Room(){m_SittingRoom = 'a';m_BedRoom = 'b';}char m_SittingRoom;private:char m_BedRoom;
};void goodFriend(Room& room)
{room.m_SittingRoom;room.m_BedRoom;
}void badFriend(Room& room)
{room.m_SittingRoom;
}

2.2类做友元

class GoodFriend
{
public:GoodFriend();void visit();Room* room;
};class Room
{
//GoodFriend类可以访问Room类中的私有成员
friend class GoodFriend;public:Room();char m_SittingRoom;
private:char m_BedRoom;
};GoodFriend::GoodFriend()
{room = new Room;
}void GoodFriend::visit()
{room->m_SittingRoom;room->m_BedRoom;
}Room::Room()
{m_SittingRoom = 'a';m_BedRoom = 'b';
}

2.3成员函数做友元

class GoodFriend
{
public:GoodFriend();void visit1();void visit2();Room* room;
};class Room
{
//将成员函数在类内声明为友元 
friend void GoodFriend::visit1();
public:Room();char m_SittingRoom;
private:char m_BedRoom;
};GoodFriend::GoodFriend()
{room = new Room;
}void GoodFriend::visit1()
{room->m_SittingRoom;room->m_BedRoom;
}void GoodFriend::visit2()
{room->m_SittingRoom;
}Room::Room()
{m_SittingRoom = 'a';m_BedRoom = 'b';
}


http://www.mrgr.cn/news/35522.html

相关文章:

  • Go八股(Ⅴ)map
  • 大模型时代,呼叫中心部门如何建设一套呼出机器人系统?
  • C++中的栈(Stack)和堆(Heap)
  • 【Hadoop】【hdfs】【大数据技术基础】课程 作业四 可视化工具的使用 大数据基础编程、实验和案例教程(第2版)
  • Java:JVM
  • sql文件
  • Vue3中使用Pinia(封装并统一导出)
  • C++_CH19_继承
  • Make breakpoint pending on future shared library load
  • 【初阶数据结构】排序——插入排序
  • 阴影的基本原理
  • Linux驱动开发初识
  • mysql学习教程,从入门到精通,SQL RIGHT JOIN语句(24)
  • Robot Operating System——多边形数据
  • [大语言模型-论文精读] Diffusion Model技术-通过时间和空间组合扩散模型生成复杂的3D人物动作
  • Thread , ThreadLocal , ThreadLocalMap , Entry 之间的关系?
  • 宝塔部署vue项目出现的各种问题
  • 【算法】模拟:(leetcode)6.Z 字形变换(medium)
  • 光子架与电子架 -- 主从子架
  • 小程序面板开发教程|开发照明 Matter 面板步骤(一)
  • WebGL阴影与后期处理
  • Taro多端统一开发解决方案
  • 多线程:死锁
  • 从 Oracle 集群到单节点环境(详细记录一次数据迁移过程)之二:生产服务器的备份操作
  • 前端读取PDF和DOCX文件(干货分享)
  • 【C++】Eclipse技巧汇总