码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【c++ 】 对象与类中方法的调用关系。类中常方法,普通方法,静态方法之间互相的调用关系


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

    • 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;
       }
    	
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    当把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;
       }
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

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

    在这里插入图片描述

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

    在这里插入图片描述

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

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

    成员方法默认是inline

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

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

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

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

  • 相关阅读:
    Java IDEA maven 配置
    【分享 10 个日常使用的脚本】
    利用servlet实现对书籍书名、单价、数量等信息的添加,计算总价
    [Linux/初学者]用户组管理
    转转回收的持久层架构演进
    信息学奥赛一本通:2038:【例5.5】最大数位置
    [23] IPDreamer: Appearance-Controllable 3D Object Generation with Image Prompts
    操作系统原理,IO控制方式,轮询流程,中断驱动流程,设备IO部件演化;IO的软件组成与层次,设备独立性;IO相关技术,缓冲技术
    设置 SSH 主机 ***: (details) 连接到 VS Code Server - 重试 2
    美团、青桔、哈啰:共享单车同车不同命
  • 原文地址:https://blog.csdn.net/aoeaoao/article/details/127869350
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号