成员函数与非成员函数的使用与区分

一文入门BMS(电池管理系统) 本文章是基于曾师兄的文稿《具有组网扩展功能的新能源汽车电池管理系统》而写的文章。该文章主要是对BMS(Battery Management System,电池管理系统)做一些简要的介绍,借此助各位也助我入门BMS。有纰漏请指出,转载请说明。学习交流请发邮件 1280253714@qq.com。 阅读详情

1、区分方式

  • 成员函数与成员变量都是类当中的定义
  • 函数、变量 在类中: 成员函数 成员变量
  • 函数不在类中: 全局函数

2、局限性

  • 全局函数无法访问类中的 私有成员
  • 如果确实需要,那么需要将该函数声明为友元函数
  • 举例
class Student
{
private:
    string name;
    int age;
public:
//构造函数必须是public,不然就无法访问了,私有变量也无法复制
    Student(string name,int age) : name(name){
        this->age = age;
    }
    friend void show(Student *pa);
};
// 用哪个类 就在哪个类中进行 友元函数声明
void show(Student *pa)
{
    cout << pa->name << " " << pa->age << endl;
}
main()
{
    Student b("xiaoming",10);
    show(&b);
    return 0;
}

3、 扩展1

  • 成员函数可以在类中声明(declare) 、 定义(defineed)
  • 也可以类外定义
  • 定义的区别
    • 类中定义的函数默认是 inline函数
    • 类外定义的不是 ,但是可以前面加上inline

4、扩展2: inline函数

  • 函数功能 :相当于是直接使用函数内容,而并不是调用,加快程序执行速度
  • 专业解释:在 c/c++ 中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了 inline 修饰符,表示为内联函数
  • 内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。
  • 如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。

5、 友元函数使用参照博客:友元函数使用

参考:

  • http://c.biancheng.net/cpp/biancheng/view/211.html
  • http://c.biancheng.net/cpp/biancheng/view/186.html
  • https://blog.youkuaiyun.com/duanyipeng/article/details/6860760(为何要把类的构造函数定义为private)
  • https://www.runoob.com/w3cnote/cpp-inline-usage.html
四参数与七参数坐标转换含义及区别 一.前言 不同坐标系,其椭球体的长半径,短半径和扁率是不同的。比如我们常用的四种坐标系北京54、西安80、WGS84、CGCS2000所对应的椭球体,它们的椭球体参数就各不相同。而不同空间直角坐标系之间的转换一般通过七参数或者四参数来实现坐标转换。 二.四参数转换 两个不同的二维平面直角坐标系之间转换通常使用四参数模型,四参数适合小范围测区的空间坐标转换,相对于七参数转换的优势在于只需要2个公共已知点就能进行转换,操作简单。 在该模型中有四个未知参数,即: (1)两个坐标平... 阅读详情

相关推荐

Xilinx VU+系列多DIE FPGA时序约束与跨DIE信号优化策略

本文深入探讨了Xilinx VU+系列多DIE FPGA的时序约束与跨DIE信号优化策略。针对2.5D/3D封装技术带来的时序挑战,详细解析了SLR区域约束、Laguna寄存器配置及跨时钟域约束等关键技术,提供了实用的TCL脚本和RTL优化示例,帮助开发者有效提升设计性能和时序收敛效率。

weixin_29209801的博客 654

【C++】成员函数

C++成员函数(Member Functions) 目录 C++成员函数(Member Functions) 1、成员函数定义(Member Function Definition) 2、内联(Inline) 3、常成员函数(Const Member Functions) 4、使用对象指针(Using Object Pointer) 5、重载成员函数(Overloading Mem...

Alvin的博客 2万+

Python海康相机api---超简单入坑学习必看

海康官网下载相机驱动​安装好以后找到Python的开发文件目录参考:D:\MVS\MVS\Development\Samples\Python\MvImport这几个文件很重要,想调用海康相机取图会用到.​为了写代码方便可以把这几个文件拷贝一下,跟你的api主文件放在同一个文件夹下可以减少80%的烦恼.​。

weixin_59360687的博客 3478

C++中的成员函数与非成员函数

1.成员函数和非成员函数 其实简单来说成员函数是在类中定义的函数,而非成员函数就是普通函数,即不在类中定义的函数,其中非成员函数比较典型的是友元函数。 2.详细解释 成员函数是类定义的一部分,通过特定的对象来调用。成员函数可以隐式访问调用对象的成员,而无须使用成员操作符。 友元函数不是类的组成部分,因此被称为直接函数调用。友元函数不能隐式访问类成员,而必须将成员操作符用于作为参数传递的对象。 3.总结 1.成员函数是面向对象的概念,所谓的成员函数,是指一个函数作为类的成员,公

zxmyoung的博客 8418

STM32CubeIDE中文注释变乱码终极解决方案:3步设置永久解决锟斤拷问题!

你是否在STM32CubeIDE中遇到过这样的崩溃场景?——精心编写的中文注释在重新生成代码后变成“锟斤拷”乱码,不仅影响代码可读性,反复修改更是浪费大量时间!作为STM32开发者,我曾被这个问题困扰许久,试过修改软件设置、工程编码却始终治标不治本。直到发现这个基于Java环境变量的终极解决方案,才彻底解决了中文乱码难题。

smart_boy__的博客 2958

基于结构的虚拟筛选模型 gnina 从源码编译

所需要的软件安装包: 安装 CUDA 装的时候看着点,第二个要你装驱动的选择,回答N,不装。 sudo sh cuda_10.0.130_410.48_linux.run sudo vim ~/.bashrc 在 ~/.bashrc 文件最后加上 export PATH=/usr/bin:/usr/local/cuda-10.0/bin${PATH} export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:${LD_LIBRARY_PATH} source ~

周迪新的博客 3188

【C++】类的常见成员函数

int _month;int _day;d1.Print();Date d2;d2.Print();return 0;对于Date类,可以通过 Init 公有方法给对象设置日期,但如果每次创建对象时都调用该方法设置 信息,未免有点麻烦,那能否在对象创建时,就将信息设置进去呢?

lyhv_v的博客 2423

LeRobot 入门教程(三)在仿真环境和自定义机器人上部署 LeRobot

本教程详细介绍了基于真实世界机器人和仿真环境的模仿学习实现方法,涵盖数据采集、训练策略和评估全流程。在真实机器人部分,重点讲解了远程操作设置、摄像头配置、数据集记录与管理技巧、策略训练(支持GPU/MPS设备)以及模型评估。仿真环境部分则演示了gym-hil的安装使用、模拟数据采集和策略训练。此外,教程还提供了自定义机器人集成指南,包括电机选择、接口继承、传感器/动作特征定义、连接管理和校准配置等核心步骤。所有方法均支持HuggingFace数据集中心和Weights & Biases工具链,为机器

2506_90492529的博客 2400

成员函数与非成员函数的区别

其实简单来说 1.成员函数是面向对象的概念,在类中定义的函数,一个函数作为类的成员,公有成员、私有成员或者保护成员。 成员函数根据类的不同,可以进行继承,根据公有私有的不同,调用方式也不同 2.非成员函数就是普通函数,就是不是在类中定义的函数,普通函数可以随便调用,并且无法继承和封装. 参考链接: https://blog.youkuaiyun.com/gs_my/article/details/8840045 ...

qq_42178122的博客 3268

【BlueDroid】【BLE】低功耗蓝牙客户端和服务端开发流程解析(超详细)

1. 精讲):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论2. 欢迎大家关注和订阅,和专栏会持续更新中.....敬请期待!

风云说通信 1925

AUTOSAR进阶图解==>AUTOSAR_SWS_DefaultErrorTracer

AUTOSAR Default Error Tracer (DET)是AUTOSAR架构中的核心错误追踪模块,提供统一的错误报告机制。DET能够处理开发错误、运行时错误和瞬态故障三类问题,支持模块级和实例级的配置管理。模块架构上,DET通过Det_API接口与其他模块交互,可配置转发错误至诊断事件管理器(DEM)或调试日志追踪(DLT)。其配置结构包含全局参数和模块实例参数,允许灵活控制错误报告行为。DET在AUTOSAR 4.3.0版本中从DevelopmentErrorTracer扩展而来,增强了错误处

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 909

C++程序设计——类的六个成员函数

C++程序设计:类的六个默认成员函数

m0_63020222的博客 4398

黑猫带你学eMMC协议第17篇:超详细的eMMC HS200 & HS400讲解

1 前言 1.1 声明 本文依据eMMC JEDEC5.1及个人工作经验整理而成,如有错误请留言。 本文结合eMMC JEDEC5.1协议手册查看效果更佳。 1.2 内容提要 本文大约6000字,主要内容有: 1.什么是emmc hs200/hs400? 2.什么是tuning?tuning的过程又是什么? 3.如何设置才能让emmc进入hs200 mode? 4.如何设置才能让emmc进入hs400 mode? 5.emmc关于HS200/HS400内部结构框图对比。 6.部分个人相关经验总结。

黑猫奥利奥的博客 1万+

C++成员函数如何工作?this指针、name mangling与成员函数指针全解析

在C++面向对象编程中,成员函数是对象行为的核心载体。我们每天都在使用成员函数,但却很少深入思考其底层的实现机制:为什么成员函数可以直接访问成员变量?编译器如何区分不同类的同名函数?静态成员函数为什么不能直接访问非静态成员?可不可以使用空指针去调用成员函数?为了解答这些问题,本文将从底层原理出发,解析成员函数和对象的关联机制,this指针的本质,名称修饰的作用,静态成员函数的特殊性,以及成员函数指针的实现细节。通过本文,读者不仅可以找到这些问题的答案,还可以掌握C++对象模型的深层原理。

qq_40529346的博客 955

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++成员函数

常量成员函数 在成员函数中,this默认情况下是一个指向类类型的常量指针,即ClassType * const;有时候我们并不会改变this所指的对象,这个时候应该将成员函数声明为const,此时this的类型为const ClassType * const。 class Person { public: int height_; int getHeight() const { ret...

天道酬勤 1254

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

揭秘C++ this指针:成员函数如何区分对象实例

本文深入解析了C++中的this指针机制,揭示了其作为隐式指针参数的本质特性。this指针是编译器自动添加到每个非静态成员函数中的隐藏参数,指向调用该函数的对象实例,使得成员函数能够区分和操作不同对象的数据成员。文章通过具体代码示例展示了this指针的工作原理,包括其参数传递机制和成员访问的实现方式。特别强调了this指针的存储位置(栈区)、空指针调用成员函数时的行为差异,以及const属性的特性。理解this指针对于掌握C++面向对象编程至关重要,它构成了成员函数操作不同对象实例的核心机制。

祯的博客 827

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

关于只读成员函数

// Contest_Test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include using namespace std; class CTest { int m_nCount; int m_nIndex; static int m_

CppPlayer 2778

用 const 限定类的成员函数

(一) 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。  在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const。所以 const 关键字对成员函数的行为作了更加明确的限定:有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函

沉淀 676

const成员函数及const

在成员函数参数列表后面加上const,表示该成员函数是const成员函数。这里的const是修饰this指针的类型。 默认情况下,this的类型是指向类类型对象的常量指针,即指针本身是常量,但指针所指的对象不是常量。 在下面例子中,this的类型是conClass *const,默认情况下不能把this绑定到一个常量对象上。这样使我们不能在一个常量对象上调用普通的成员函数。 如果成员函数不改

tianya_team 625

C++的const成员函数

我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误。例如, [cpp]view plaincopy constcharblank=‘’; blank=‘\n’;//错误 面向对象程序设计中,为了体现封装性,通常不允许直接修改类对象的数据成员。若要修改...

105

C++之const类成员变量,const成员函数

const修饰类的成员函数const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,这里不再赘述,主要来看一下当const修饰类的成员函数时,成员函数有什么特点。https://www.cnblogs.com/cthon/p/9166715.html 类的成员函数后面加 const,表明这个函数不会对这个类对象的数...

weixin_34122548的博客 537

const修饰类的成员函数

《Effective C++》里面说,尽量使用const,const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,这里不再赘述,主要来看一下当const修饰类的成员函数时,成员函数有什么特点。 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。

仗剑天涯 2397

C++中常量成员函数的含义

C++中常量成员函数的含义 本文内容来源:《C++必知必会》 使用常量成员函数可以改变对象的逻辑状态,虽然对象的物理状态没有发生改变。考虑如下代码,它定义了一个类X: class X{ public: X():buffer_(0),isComputed_(false){} //... void setBuffer(){ ...

260

C++成员函数是如何区别那个对象在调用它?

this指针 ​ 类的成员函数存储在代码段中,类的成员变量存储在每个类对象中,所有类对象共享一份成员函数。 ​ 成员函数是如何区别那个对象在调用它? ​ 当使用类对象调用成员函数时,编译器会把对象的地址隐式传递给成员函数,每个类成员函数都隐藏着一个参数this指针 ​ 在成员函数中之所以能直接访问成员变量就是隐藏着this指针,当在成员函数中调用其它成员函数时,也会把this指针传递过去。 注意:this指针是隐藏的,但也可以显示地使用 C++类中的静态成员函数和友元是没有隐藏的this指针的

weixin_51420051的博客 779

类的成员函数与内联以及静态成员

一、类的成员函数与内联 在类内定义的所有函数都自动称为内联函数。如果在类内声明,在类外定义,也可以定义为内联函数。在定义函数时添加inline限定符。。 (1)此外,内联函数一定要和函数定义在一起,否则只是声明的时候加上内联,是不会成为内联函数的 声明:inline void fun(); 函数体:void fun(){} 这样只有声明带内联,函数定义时没有带内敛,所以fun不是内联函数。 (2)inline一定要和函数定义在一起。 声明:void fun(); 定义:inline void fun(){}

yi_chengyu的博客 2554

类中声明的函数和类的成员函数

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std;class A { public: void f(); void f1(); private: int m_nA; };void A::f1() { cout << 1 << endl; }void f() { cout

粗衫沾酒,青锋承锈,自称雄. 680
上一篇: 指针与函数
下一篇: 友元函数的使用方式
Continue!
博客等级 码龄9年 66粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值