【c++ 】 对象与类中方法的调用关系。类中常方法,普通方法,静态方法之间互相的调用关系

news2025/7/9 11:48:22

对象与类中方法的调用关系。类中常方法,普通方法,静态方法之间互相的调用关系

  • 1.对象与方法之间的调用
    • 1.常对象只能调用常成员方法
    • 2.普通对象既可以调用普通成员方法,也可以调用常成员方法,当两个同名的常成员方法和普通成员方法重载时,优先调用普通成员方法
    • 3.静态对象既可以调用普通成员方法,也可以调用常成员方法
  • 2.方法与方法之间的调用
    • 1.普通成员方法可以调用常成员方法
    • 2.常成员方法不可以调用普通成员方法
    • 为什么普通成员方法可以调用常成员方法,而常成员方法不能调用普通成员方法呐?
    • 3.普通成员方法可以调用静态成员方法
    • 4.常成员方法可以调用静态成员方法
    • 5.静态成员方法既不可以调用普通成员方法,也不可以调用常成员方法,它只能调用静态成员方法
  • 成员方法默认是inline
  • 为什么要给成员函数添加this指针?
  • const只能修饰成员函数不能修饰全局函数

1.对象与方法之间的调用

1.常对象只能调用常成员方法

在这里插入图片描述

2.普通对象既可以调用普通成员方法,也可以调用常成员方法,当两个同名的常成员方法和普通成员方法重载时,优先调用普通成员方法

1.既可以调用普通成员方法,又可以调用常成员方法
在这里插入图片描述

在这里插入图片描述

当两个同名的常成员方法和普通成员方法重载时重载时,优先调用普通成员方法
在这里插入图片描述

3.静态对象既可以调用普通成员方法,也可以调用常成员方法

在这里插入图片描述

2.方法与方法之间的调用

1.普通成员方法可以调用常成员方法

在这里插入图片描述

2.常成员方法不可以调用普通成员方法

在这里插入图片描述

为什么普通成员方法可以调用常成员方法,而常成员方法不能调用普通成员方法呐?

普通的成员方法和常性成员方法都有一个隐含的this指针。

我们通过编译后的代码,来讲解一下原因,此时的代码变成这样。

普通成员方法调用常成员方法时

void fun(Complex * const this) 
	{
	    fun1();
		std::cout << "fun" << std::endl;
	}
  void fun1( const Complex * const this) const
   {
		std::cout << "const fun " << std::endl;
   }
	
	

当把fun中的this传给fun1中的形参时,fun的this为不能修改指向,
fun1中的this为不能修改指向不能修改值,它的权限被缩小了,可以

而当常成员方法调用普通成员方法时

  void fun(Complex * const this) 
	{
		std::cout << "fun" << std::endl;
	}
  void fun1( const Complex * const this) const
   {
        fun();
		std::cout << "const fun " << std::endl;
   }
	

fun1中的this传给fun中的形参时,fun1中的this为不能修改指向不能修改值,而fun中的形参可以修改值,所以它把指针的权限放大了,所以不行。

3.普通成员方法可以调用静态成员方法

在这里插入图片描述

4.常成员方法可以调用静态成员方法

在这里插入图片描述

5.静态成员方法既不可以调用普通成员方法,也不可以调用常成员方法,它只能调用静态成员方法

在这里插入图片描述
因为普通成员方法和常成员方法都有隐含的this指针,即需要一个对象来调用,当普通成员方法调用普通成员方法或者常成员方法时,都会把隐含的this指针传给被调用的方法,而静态成员方法没有this指针,所以不能调用它俩。

成员方法默认是inline

为什么要给成员函数添加this指针?

1.节省空间
没必要为每个对象运行时都存放一个成员方法,因为对于成员方法来说,不论是哪个对象,它们干的事情都是一样的,所以通过this指针,让所有对象都共用这一个成员方法。
2.当前计算机还没有突破冯诺依曼的体系,还是面向过程的。

const只能修饰成员函数不能修饰全局函数

因为const本质是修饰this指针的,而全局函数没有this指针
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/6736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你安全吗?丨秦淮到底是哪种黑客?你猜对了吗?

作者&#xff1a;黑蛋 大家都知道黑客&#xff0c;但是黑客也分很多种类&#xff0c;那么秦淮属于哪种黑客呢&#xff0c;我们先来看一看黑客的种类&#xff1a; 1、白帽黑客&#xff1a;白帽黑客是指通过实施渗透测试&#xff0c;识别网络安全漏洞&#xff0c;为政府及组织工…

蓝桥杯入门即劝退(九)罗马数字

“为什么你没有变强&#xff0c;因为你最近一直过得太舒服” ----------持续更新蓝桥杯入门系列算法实例------------- 如果你也喜欢Java和算法&#xff0c;欢迎订阅专栏共同学习交流&#xff01; 你的点赞、关注、评论、是我创作的动力&#xff01; -------希望我的文章对你有…

数字孪生3d智慧核电可视化场景应用展示,包括:智能计算,智能运维

最近几年来&#xff0c;数字孪生技术已被应用于核电领域&#xff0c;并且国内已有一些公司在具体实践过程中&#xff0c;通过数字孪生赋能核电更加经济、灵活、高效运维。 北京智汇云舟科技有限公司成立于2012年&#xff0c;专注于创新性的“视频孪生&#xff08;实时实景数字孪…

c++ 正则表达式

文章目录正则表达式基本语句regex_matchregex_searchregex_token_iteratorregex_replace示例匹配电话号码匹配QQ号码匹配IP地址正则表达式 什么是正则表达式&#xff1f; 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff08;pattern&#xff09;&#xff0…

GENERALIZATION THROUGH MEMORIZATION: NEAREST NEIGHBOR LANGUAGE MODELS

Abatract 我们引入了kNN-LMs&#xff0c;它扩展了一个预先训练的神经语言模型&#xff08;LM&#xff09;&#xff0c;通过与k个最近邻&#xff08;kNN&#xff09;模型线性插值。最近邻是根据预先训练好的LM嵌入空间中的距离进行计算的&#xff0c;并可以从任何文本集合中提取…

45-命令行基础操作

45-命令行基础操作LInux命令行基础LInux命令基础知识Linux的Gul与CLI为什么使用Linux命令行Linux命令语法格式Linux命令分类LInux基础命令登录命令电源管理命令电源命令1: shutdown电源命令2: halt电源命令3: reboot文件管理命令Linux文件目录结构(1)Linux文件路径帮助命令目录…

Vue+Vite+TS

目录#、基础配置1、安装Node.js2、修改npm镜像源3、配置vscode一、创建项目二、Ref全家桶三、computed计算属性js中数组使用的高阶函数四、watch监听器#、基础配置 1、安装Node.js 下载地址&#xff1a;https://nodejs.org/zh-cn/download/ 安装成功&#xff0c;查看版本node …

vue create 创建项目的时候遇到使用nvm切换node后 提示‘vue‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件

前景:我是用的是nvm切换的node版本&#xff0c;不是直接安装高级版本node,有nvm同样困惑的可以用以下方式解决问题&#xff0c;加油&#xff01;&#xff01;&#xff01; 报错: ‘vue’ 不是内部或外部命令,也不是可运行的程序 或批处理文件 解决方法: 1.检查node和npm nod…

libvirt 使用UEFI 设置 edk2-ovmf

一、ovmf 与 edk2 关系&#xff1a; 英特尔EFI开发工具包II (edk2)的子项目&#xff0c;所以在edk2 源码中也能找到 ovmf 部分&#xff0c;ovmf 使UEFI支持Ia32和X64虚拟机 二、OVMF_VARS.fd 与 OVMF_CODE.fd&#xff1a; 1、变量存储和固件的可执行文件&#xff1b; 2、OVMF_…

【数据结构与算法】单链表的增删查改(代码+图解)

目录 顺序表和链表的特点&#xff1a; 时间复杂度&#xff1a; 分析&#xff1a; 单链表结构体和数据类型&#xff1a; 开辟一个节点和存储数据&#xff1a; 打印 尾插 尾删 头插 头删&#xff1a; 查找单链表中的元素 在pos后插入x 在pos前插入x 删除pos后的一个…

【详细学习SpringBoot源码之自定义监听器实战演练-6(自定义监听器、自定义监听事件、指定监听事件)】

一.知识回顾 【0.SpringBoot专栏的相关文章都在这里哟&#xff0c;后续更多的文章内容可以点击查看】 【1.SpringBoot初识之Spring注解发展流程以及常用的Spring和SpringBoot注解】 【2.SpringBoot自动装配之SPI机制&SPI案例实操学习&SPI机制核心源码学习】 【3.详细学…

RabbitMQ - 交换机

文章目录1. Exchanges2. 临时队列3. 绑定 bindings4. Fanout exchange4.1 Fanout 介绍4.2 Fanout 实战5. Direct exchange5.1 Direct 介绍5.2 多重绑定5.3 Direct 实战6. Topics exchange6.1 Topic 的介绍6.2 Topic 匹配案例6.3 Topic 实战1. Exchanges RabbitMQ 消息传递模型…

Techsmith Camtasia Studio2023专业电脑屏幕录制工具

Techsmith Camtasia Studio2023电脑版版下载! 从今天开始&#xff0c;我们开始讲解短视频制作。一提到短视频制作&#xff0c;很多人可能首先想到的&#xff0c;是PR、绘声给影。的确&#xff0c;PR和绘声绘影功能非常强大&#xff0c;毕竟它们是影视制作的专业软件&#xff0…

【Spring Boot】Day01

文章目录一、Spring Boot的引入创建总结演示运行可能出现的错误二、使用idea创建Spring Boot创建运行http://localhost:8080/hello三、介绍配置文件介绍application.yml一、Spring Boot的引入 创建 总结 # 项目中集成spring和springmvc 1. 新建项目 2. 拷贝jar包(maven) &…

5G核心网技术基础自学系列 | SMF提供的服务

书籍来源&#xff1a;《5G核心网 赋能数字化时代》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G核心网技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 SMF提供两种服务&#xff0c; 即N…

图文详解Linux基础经典教程(06)——CentOS安装JDK

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 概述 从本节教程开始&#xff0c;我们尝试在CentOS上搭建Java开发环境&#xff0c;即在CentOS中安装&#xff1a;JDK、Tomcat、MySQL等开发工具。 这些工具均可选用YUM或压…

225. 用队列实现栈、232. 用栈实现队列、622. 设计循环队列

LeetCode题解前言用队列实现栈用栈实现队列循环队列总结前言 这三道题都是比较经典的一道题&#xff0c;主要想要考察我们对于栈、队列的性质的应用&#xff0c;也是笔试题的常客&#xff01;&#xff01;&#xff01;接下来就让我们一起来手撕它&#xff01;&#xff01;&…

【C】程序环境和预处理

&#x1f648;个人主页&#xff1a;阿伟t &#x1f449;系列专栏&#xff1a;【C语言–大佬之路】 &#x1f388;今日心语&#xff1a;你所看到的惊艳&#xff0c;都曾被平庸所历练。 本章重点&#xff1a; 程序的翻译环境程序的执行环境详解&#xff1a;C语言程序的编译链接…

next-key lock案例

1. 加锁规则 在默认的可重复读的隔离级别下&#xff0c;加锁规则可以总结为&#xff1a;两个原则&#xff0c;两个优化和一个bug。 原则1&#xff1a;加锁的基本单位是next-key lock。next-key lock是前开后闭的区间原则2&#xff1a;查询过程中访问到的对象才会加锁优化1&am…

计算机网络-数据交换技术

数据交换&#xff1a;实现在大规模网络核心上进行数据传输的技术基础。 常见的数据交换技术包括&#xff1a;电路交换、报文交换和分组交换。 一、电路交换 电路&#xff1a;通过中间交换结点为两台主机之间建立一条专用的通信线路。电路交换&#xff1a;是最早出现的一种交换…