C++中类的成员函数及内联函数使用及说明
目录
- 成员函数
- 成员函数中出现的参数
- 类相关的非成员函数
- 自己定义的对象作为函数的形参
- 成员函数返回值是对象的引用
- 成员函数调用成员函数
- 内联函数
成员函数
即在类内定义的方法。通过对象名.成员函数()的方式可以调用。
一般将成员函数定义在类外,因为成员函数一般比较复杂。
简单的成员函数可以定义在类内,定义在类外的方式如下所示:
成员函数中出现的参数
对于成员函数中出现的参数,首先先在成员函数内部查找其声明,如在成员函数内没找到,则在类内寻找,类内所有权限的成员都可以被考虑,即使声明部分出现在函数的使用之后。
如果类内也没有找到,则再到成员函数定义之前的作用域继续寻找。
类相关的非成员函数
这些非成员函数属于类的接口组成部分,但其实际上不属于类本身。
这些函数一般不定义在类中。他们一般和类的声明放在一起,保存在同一个头文件中。
用户如果要使用其中任一一个函数只需要调用该头文件即可。
自己定义的对象作为函数的形参
在类内也可以使用自己的类定义变量。也可以让另一个类定义的变量作为属性。
在一个类中,类内的属性都是已知的。
成员函数返回值是对象的引用
如果成员函数的返回值是对象的引用的话,则其实返回的就是调用该成员函数的对象本身。
而如果返回值类型是对象的话,那么返回的就是对调用该成员函数的对象的一个拷贝。
后续对其进行的更改只是更改该副本的值,不能改变原对象。
成员函数调用成员函数
当成员函数调用成员函数时,this指针会在两个函数之间隐式地传递。
内联函数
使用内联机制的函数称为内联函数。
一般的函数在调用时,会先保存寄存器,并在返回时恢复,并且需要拷贝实参,程序需要在新的位置进行。这一过程效率较低。对于规模小、需要频繁调用的函数,例如在类内定义的成员函数,调用一个函数的时间开销远远大于小规模函数体中全部语句的执行时间,这种机制并不合适。
对此,C++系统会自动将它们作为内置(inline)函数来处理。程序调用内联函数时,并不是真正地执行函数的调用过程(如保留返回地址等处理),而是把函数代码嵌入程序的调用点。这样可以大大减少调用成员函数的时间开销。
当然,太复杂的函数不会作为内联函数。
是否作为内联函数由编译器自己决定,对类内定义的成员函数,可以省略inline,因为这些成员函数已被隐含地指定为内置函数。
若是在函数外定义,则可以在前面写inline
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
C++编程中队内联函数的理解和使用
函数调用过程 c++经过编译生成可执行程序文件exe,存放在外存储器中.程序启动,系统从外存储器中将可执行文件装载到内存中,从入口地址(main函数起始处)开始执行.程序执行中遇到了对其他函数的调用,就暂停当前函数的执行,并保存下一条指令的地址作为从被调函数返回后继续执行的入口点,保存现场.然后转到被调函数的入口地址执行被调函数.遇到return语句或者被调函数结束后,恢复先前保存的现场,从先前保存的返回地址处继续执行主调函数的其余部分. 内联函数 函数调用需要进行现场保护,以便在函数调用之后继
-
c++中的内联函数inline用法实例
问题描述:类中成员函数缺省默认是内联的,如果在类定义时就在类内给出函数定义,那当然最好.如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外要加上 inline,否则就认为不是内联的.内联函数的inline要加在函数前面,不可以加在声明前面. class A { public:void Foo(int x, int y) { } // 自动地成为内联函数 } //正确写法: // 头文件 class A { public: void Foo(int x, int y); } // 定义文
-
C++ 内联函数详解
目录 一.C++ 内联函数 1.内联 2.语法 3.评价 总结 一.C++ 内联函数 1.内联 C 语言中有宏函数的概念.宏函数的特点是内嵌到调用代码中去,避免了函数调用的开销.但是由于宏函数的处理发生在预处理阶段,缺失了语法检测和有可能带来的语意差错. 2.语法 C++提供了 inline 关键字,实现了真正的内嵌. 宏函数 VS inline函数 #include <iostream> #include <string.h> using namespace std; //优点:
-
C++中类的成员函数及内联函数使用及说明
目录 成员函数 成员函数中出现的参数 类相关的非成员函数 自己定义的对象作为函数的形参 成员函数返回值是对象的引用 成员函数调用成员函数 内联函数 成员函数 即在类内定义的方法.通过对象名.成员函数()的方式可以调用. 一般将成员函数定义在类外,因为成员函数一般比较复杂. 简单的成员函数可以定义在类内,定义在类外的方式如下所示: 成员函数中出现的参数 对于成员函数中出现的参数,首先先在成员函数内部查找其声明,如在成员函数内没找到,则在类内寻找,类内所有权限的成员都可以被考虑,即使声明部分出现在函
-
C++宏函数和内联函数的使用
目录 1. 宏常量&宏函数 1.1 定义 1.2 使用宏函数的注意事项 2. 内联函数 2.1 定义 2.2 某些情况编译器不会做内联编译 3. 补充 3.1 宏定义和函数的区别 3.2 宏定义和typedef的区别 3.3 宏函数和内联函数的区别 3.4 define宏定义和const的区别 1. 宏常量&宏函数 1.1 定义 // a. 定义一个宏常量 #define MAX 1024 // 宏常量 MAX称为符号常量 // b. 定义一个宏函数 // 宏函数:宏函数就是使用宏定义定
-
深入探讨:宏、内联函数与普通函数的区别
内联函数的执行过程与带参数宏定义很相似,但参数的处理不同.带参数的宏定义并不对参数进行运算,而是直接替换:内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数. 内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定:而带参数宏定义的参数没有类型的概念,只有在宏展开以后,才由编译器检查语法,这就存在很多的安全隐患. 使用内联函数时,应注意以下问题: 1)内联函数的定
-
C语言中的内联函数(inline)与宏定义(#define)详细解析
先简明扼要,说下关键:1.内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样在运行时速度更快. 2.内联函数可以调试,而宏定义是不可以调试的.内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下,则应该将函数冠以inline.下面详细介绍一下探讨一下内联函数与宏定义. 一.内联函数是什么?内联函数是代码被插入到调用者代码处的函数.如同 #define 宏(但并不等同,原因见下文),内联函数通过避免被调用的开销来提
-
C++超详细分析讲解内联函数
目录 宏函数(带参数的宏)的缺点 inline修饰的函数就是内联函数 内联函数的特点 宏函数和内联函数的区别 宏函数(带参数的宏)的缺点 第一个问题:宏函数看起来像一个函数调用,但是会有隐藏一些难以发现的问题. 例如: #define FUN(x, y) (x * y) printf("%d", add(3, 3 + 2)) //3 * 3 + 2 = 11 以上情况可以通过加 “()” 解决: #define FUN(x, y) (x * y) printf("%d&quo
-
Kotlin 内联函数详解及实例
Kotlin 内联函数详解及实例 概述 在说内联函数之前,先说说函数的调用过程. 调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方.这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执行.也就是通常说的压栈和出栈.因此,函数调用要有一定的时间和空间方面的开销.那么对于那些函数体代码不是很大,又频繁调用的函数来说,这个时间和空间的消耗会很大. 那怎么解决这个性能消耗问题呢,这个时候
-
详解C++中的内联函数和函数重载
内联函数(内嵌函数,内置函数) 调用函数时需要一定的时间和空间的开销.C++提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开.这种在函数调用处直接嵌入函数体的函数称为内联函数(inline function),又称内嵌函数或内嵌函数. 指定内联函数的方法很简单,只需要在定义函数时增加 inline 关键字. 注意:是在函数定义时增加 inline 关键字,而不是在函数声明时.在函数声明时增加 inline 关键虽然没有错误,但是也没有任何效果 inline 关键
-
Kotlin中关于内联函数的一些理解分享
前言 看了很多博客,才明白了内联的含义,其实最根本的就是将写在别处的代码拷贝到你现在执行的方法中,相当于在一个方法中执行,java的方法执行是需要压栈出栈的对吧,如果是两三个方法那就是两三次的压栈出栈,为了节省这个操作,提高一定的效率,kotlin就出了这么个函数.但又想想,如果是个超级大的函数,考来考去的也是很麻烦啊,所以这东西需要自己权衡吧,遵守单一职责,降低代码圈发杂度才是根本. 内联函数的理解 inline函数(内联函数)从概念上讲是编译器使用函数实现的真实代码来替换每一次的函数调用,带
-
C++ inline内联函数详解
函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码.CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码:被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行. 一个 C/C++ 程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条,这个链条的起点是 main(),终点也是 main().当 main() 调用完了所有的函数,它会返回一个值(例如return 0;)来结束自己的生
随机推荐
- jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
- PHP多用户博客系统分析[想做多用户博客的朋友,需要了解]第1/3页
- 详解Spring Boot 使用Java代码创建Bean并注册到Spring中
- ASP.NET将Session保存到数据库中的方法
- python 链接和操作 memcache方法
- C#使用listView增删操作实例
- ERROR: Error in Log_event::read_log_event()
- PHP面向对象程序设计OOP继承用法入门示例
- 探讨JQUERY JSON的反序列化类 using问题的解决方法
- c++大数阶乘的实现方法
- 微信小程序组件 marquee实例详解
- 微信小程序 Record API详解及实例代码
- TabLayout使用方法详解
- Android ListView列表控件的介绍和性能优化
- java 基础之final、finally和finalize的区别
- Android 客户端RSA加密的实现方法
- 我的Node.js学习之路(二)NPM模块管理
- Vue中的slot使用插槽分发内容的方法
- Opencv透视变换综合实例详解
- Android仿微信多人音视频通话界面