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

从C++开始的编程生活(7)——取地址运算符重载、类型转换、static成员和友元

前言

本系列文章承接C语言的学习,需要有C语言的基础才能学会哦~
第7篇主要讲的是有关于C++的取地址运算符重载类型转换static成员友元
C++才起步,都很简单

目录

前言

取地址运算符重载

const成员函数

基本语法

特点

取地址运算符重载

类型转换

static成员

友元

特点


取地址运算符重载

const成员函数

tips:const只有在修饰指向内容的时候,才设计权限的放大和缩小的问题。

基本语法

//无const,传入参数为Date* const this,不可修改this指针本身
void Print() 
{cout << _year << "-" << _month << "-" <<_day;
}//有const,传入参数为const Date* const this,不可修改this指针和其指向的内容
void Print() const
{cout << _year << "-" << _month << "-" <<_day;
}

如上,const修饰后的成员函数Print,不可以在对类的任何成员进行修改

特点

const修饰的成员函数,const放在参数列表后。
②const修饰后,成员函数不可以修改类对象的任何成员

使用const,可以避免成员被意外修改,应加尽加

取地址运算符重载

对于自定义类型,只要是运算符,要使用必须先重载。

Date* operator&()
{return this;
}const Date* operator&() const
{return this;
}

为了避免权限问题需要重载取Date*指针和const Date*指针或者可以自定义返回一个任意地址(也可空指针),不过要当心出错。

类型转换

C++11,支持内置类型隐式类型转化为自定义类型,但是需要有相关内置类型为参数的构造函数
该隐式转换过程中需要调用到构造函数。

//类A的构造函数
A(int a1)
:_aa1(a1)
{}//运行代码
A aa1 = 1;

①语法上,先用常数1作为构造函数的参数构造一个临时对象,再用这个临时对象拷贝构造为aa1。这里会出现连续的构造,而编译器会将其优化为直接一次构造

A& aa2 = 1;//不可行×

如上,要注意以1构造的临时对象为const修饰,要注意权限问题。

const A& aa3 = 1;

如果不想发生内置类型隐式转换为自定义类型,则用关键字explicit
③若A类型有多个内置类型成员(构造函数有多个参数),想用两个或以上参数进行隐式转换,需要用大括号和逗号表达。(如下)。

A aa3 = {1, 1}

static成员

①static修饰的成员变量,成为静态成员变量,static变量必须要在类外初始化。(类里面声明,类外初始化
②static成员变量不属于某个具体对象存放在静态区
③static修饰的成员函数,称之为静态成员函数,static函数没有this指针
④static成员函数可以访问静态成员但是不能访问非静态的成员,因为他没有this指针,没有隐藏的this指针
不可以在声明时给static成员变量缺省值
非静态成员函数可以访问任意的静态成员变量和静态成员函数
⑦同样受访问限定符限制
 

友元

提供了一种突破类访问限定符的封装来访问的方式,在声明前加friend修饰,友元分为友元函数友元类

特点

①友元函数可以访问类的私有和保护成员,但他只是声明不是类的成员函数而是外部函数
②友元可以在类的任何位置声明不受访问限定符的限制
③一个类中,友元类的成员函数也是该类的友元函数
一个函数可以是多个类的友元函数
不具有交换性和传递性。比如,A是B的友元,但是B不是A的友元;A是B的友元,B是C的友元,但是A不是C的友元。
友元会破坏封装,所以不适宜多用

❤~~本文完结!!感谢观看!!接下来更精彩!!欢迎来我博客做客~~❤


文章转载自:

http://ojkTdN9l.pdwzr.cn
http://akPHxa2g.pdwzr.cn
http://CO6kwcma.pdwzr.cn
http://TS7WOHVO.pdwzr.cn
http://w19xJi17.pdwzr.cn
http://Vpp1cxV4.pdwzr.cn
http://1YJdzeWv.pdwzr.cn
http://0HfWUju8.pdwzr.cn
http://a6nYxtW0.pdwzr.cn
http://QI2BQBuR.pdwzr.cn
http://KJ9JNC6H.pdwzr.cn
http://P1KgOx7Y.pdwzr.cn
http://xGRQ6pzO.pdwzr.cn
http://lYfstkFX.pdwzr.cn
http://XpoDASnk.pdwzr.cn
http://MYCXEioM.pdwzr.cn
http://aEOSoFVS.pdwzr.cn
http://JDp2P7Gy.pdwzr.cn
http://8YCdHJOH.pdwzr.cn
http://FMMpRFoc.pdwzr.cn
http://Dkz2kVt9.pdwzr.cn
http://foABFNx2.pdwzr.cn
http://qIGRBDxt.pdwzr.cn
http://dIrYQBY0.pdwzr.cn
http://cDzM0nIc.pdwzr.cn
http://cdNtTqgo.pdwzr.cn
http://ECSMS5L0.pdwzr.cn
http://TfhWyYew.pdwzr.cn
http://WHyTubTg.pdwzr.cn
http://wtuZPhmp.pdwzr.cn
http://www.dtcms.com/a/375010.html

相关文章:

  • ArcGIS学习-20 实战-县域水文分析
  • Claude Code 平替:OpenAI发布 Codex CLI ,GPT-5 国内直接使用
  • 技术速递|保护 VS Code 免受提示注入攻击
  • JAVA,IOIOIOIOIOIOIOIOIOIOIOIOIOIO
  • xv6 源码精读(一)环境搭建
  • 基于Golang + vue3 开发的 kafka 多集群管理
  • uniapp微信小程序商品列表数据分页+本地缓存+下拉刷新+图片懒加载
  • OSPF特殊区域、路由汇总及其他特性
  • 后端接口防止XSS漏洞攻击
  • Hadoop(十一)
  • 【Linux基础知识系列:第一百二十五篇】理解Linux中的init与systemd
  • iOS原生开发和Flutter开发的看法
  • 【ArkTS-装饰器】
  • XSS漏洞检测和利用
  • Vue3 生命周期函数
  • Flask/Django 生产部署:Gunicorn vs Nginx,Windows 与 Linux 实战指引
  • 从 Row 到 WaterFlow:鸿蒙应用开发ArkUI布局全家桶教程
  • 开发避坑指南(44):Mybatis-plus QueryWrapper and()拼接嵌套复杂条件的技巧
  • 消息队列(MQ)初级入门:详解RabbitMQ与Kafka
  • R语言对excel中多个sheet子表批量进行地理探测器计算
  • 开讲啦| MBSE公开课:第六集 MBSE远期目标与总结(完结)
  • 实习项目包装--HTTP 协议和 Web API
  • linux升级系统,重启出现Minimal BASH-like line editingis supported
  • ARM架构---指令集分类、内核组成,RAM与ROM的分类、工作模式、异常处理机制、立即数、s后缀、指令说明、汇编和 C 函数的相互调用
  • Qwen3微调教程:从零开始训练你的定制语言模型
  • 本地一键部署IndexTTS2,生成情绪饱满的语音,支持Windows和Mac
  • VMware虚拟机CentOS磁盘扩容完整指南(解决growpart报错 LVM扩容)
  • 【增删改查操作】
  • MySQL 多表操作与复杂查询:深入理解多表关系和高级查询
  • 网络相关知识整理