成员函数

简介: 成员函数

1.类的定义中实现的成员函数定义

直接在类的定义中实现的成员函数定义,会被当做inline内联函数来处理,但毕竟这只是对编译器的建议,能不能内联成功,取决于编译器,所以成员函数定义体尽量写的简单一些,增加被内联的概率

2.常量成员函数

对于成员函数的声明和实现代码分开的情况下,要记得再成员函数的声明中增加const,也在实现中增加const,都是在成员函数末尾加

加的作用是告诉系统,这个成员函数不会修改该对象里面的任何成员变量的值,也就是这个成员函数不会改变这个对象的状态

这种也叫作常量成员函数

void noone() const
{
    Hour += 10; //错误,成员函数不可以修改成员变量的值
}
const Time abc;
abc.addhour(12); //错误,因为addhour成员函数不是const,只能被非cosnt对象调用
abc.noone();//正确,因为noone是const
Time def;
def.noone();//const成员函数,可以被非const和const对象对象,也就是万人迷,而非const成员函数只能被非const对象调用

普通函数(非成员函数)末尾不能加const,编译都通不过,因为const在函数末尾的意思是,成员函数不会修改对象里面任何成员变量值,而普通函数没有对象这个概念

3.mutable

mutable翻译成中文,是不稳定的,容易改变的意思,与const反着来,而且mutable的引入也是为了突破const的限制

假如咱们写的const成员函数,需要修改成员变量的值,那怎么办,删掉const吗,那这样的话,cosnt对象就不能再调用这个非const成员函数了,所以引入了mutable来修饰一个成员变量,表示这个变量永远处在可变状态,即使在const结尾修饰的成员函数中

mutable int myHour;
void noone() const
{
    myHour += 3; //现在就可以修改了
}

4.static在类里面的作用

static在类里面的作用,定义的变量和函数,是属于类的,而不是属于某个对象的,并且在定义的函数中,与对象有关的成员变量不能出现在它定义的函数中,声明的时候用static,定义的话不用加

5.使用类的构造函数初始化列表或在构造函数中给Second值,该值会覆盖掉初始值

例如在类里面已经定义了int Second = 0;

构造函数是这样的

Time::Time(int tmphour, int tmpmin, int tmpsec)
                    :Second(tmpsec)    //通过初始化列表来给Second值或者
{
    Second = tmpsec;                 //通过赋值来给Second值                           
}

6.cosnt成员变量的初始化

对于类的const成员,只能使用初始化列表来初始化,而不能在构造函数内部进行赋值操作

比如在类声明里面,有const int testvalue //当然这里可以给初值,比如const int testvalue = 19;

那么在构造函数定义中,代码应该如下

Time::Time(int tmphour, int tmpmin, int tmpsec)
                :Hour(tmphour), Minute(tmpmin), testvalue(18)
{
    testvalue  = 6; //不可以在这里初始化testvalue                                
}

上面创建testvalue这种常量属性的变量时,Time构造函数完成初始化以后,也就是Time::Time(int tmphour, int tmpmin, int tmpsec)

:Hour(tmphour), Minute(tmpmin), testvalue(18)执行完后,testvalue才真正具备了const属性,在构造testvalue这个const变量(对象)过程中,Time构造函数可以向其内部写值,如上面的testvalue(18),因为构造函数要进行很多看得见和看不见的写值操作,所以构造函数不能声明为const的

一旦程序员书写了自己的构造函数,那么在创建对象的时候,必须提供与其书写的构造函数形参相符合的实参,才能成功创建对象

相关文章
|
运维 大数据 Shell
时间命令date,你真的会用了吗?
时间命令date,你真的会用了吗?
322 0
|
4月前
|
JSON API 数据安全/隐私保护
【干货满满】分享淘宝API接口到手价,用python脚本实现
淘宝开放平台通过API可获取商品到手价,结合商品详情与联盟接口实现优惠计算。需使用AppKey、AppSecret及会话密钥认证,调用taobao.tbk.item.info.get接口获取最终价格。代码示例展示签名生成与数据解析流程。
|
11月前
|
供应链 数据可视化 搜索推荐
商业模式画布BMC入门指南:模块、实操与工具
2分钟了解什么是商业模式画布BMC,哪些工具可以绘制。
1340 11
商业模式画布BMC入门指南:模块、实操与工具
|
5月前
|
数据可视化 Linux C#
Visual Studio 高手进阶的 10 个效率与洞察力利器
本文深入解析10个Visual Studio中常被忽视的高级功能与技巧,专为资深开发者设计。内容涵盖性能剖析、调试增强、内存布局查看、自定义调试可视化、条件断点、并行调试、正则搜索、构建管理、热重载突破及WSL2集成等,助你挖掘VS潜能,显著提升开发效率与问题诊断能力,成为真正的VS忍者。
172 0
|
3月前
|
Unix Linux Shell
指定端口-SSH连接的目标(告别 22 端口暴力破解)
本文介绍了 SSH 命令 `ssh -p 44907 root@IP` 的含义与使用方法,包括命令结构拆解、完整示例及执行过程详解,帮助用户安全地远程登录服务器。
381 0
|
9月前
|
存储 网络协议 网络安全
Hyper-V Win10虚拟机配置常见问题
在配置Hyper-V Win10虚拟机时,用户常面临网络连接、虚拟交换机配置、资源分配及其他问题。例如,虚拟机无法获取IP地址可能源于DHCP服务异常,需检查并启动该服务;外部虚拟交换机配置错误则需确保物理网络适配器正确连接。此外,内存不足或虚拟硬盘性能瓶颈也会影响运行效果。通过合理调整资源配置、优化设置及遵循最佳实践,可有效解决这些问题。
|
11月前
|
小程序 JavaScript 数据挖掘
ClkLog常见问题-指标定义与统计逻辑Sec.1
用户行为分析指标项是衡量产品和运营管理的关键因素,它们可以帮助企业深入了解用户需求、行为模式、产品表现等多个方面。 比如页面停留时间、平均停留时长可以分析用户的需求和兴趣;跳出率、留存率可以查询用户的体验情况;事件触发次数、转化率等可以评估业务流程是否顺畅或者营销策略是否成功。 这篇我们将完整介绍ClkLog的中使用到的指标项定义以及一些重点指标的统计逻辑,便于运营人员理解后做数据分析,同时如果大家在使用过程中发现了指标项为空或异常的情况,可以对照说明排查问题。
ClkLog常见问题-指标定义与统计逻辑Sec.1
|
9月前
|
缓存 Java 应用服务中间件
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——依赖导入和Thymeleaf相关配置
在Spring Boot中使用Thymeleaf模板,需引入依赖`spring-boot-starter-thymeleaf`,并在HTML页面标签中声明`xmlns:th="http://www.thymeleaf.org"`。此外,Thymeleaf默认开启页面缓存,开发时建议关闭缓存以实时查看更新效果,配置方式为`spring.thymeleaf.cache: false`。这可避免因缓存导致页面未及时刷新的问题。
386 0
|
人工智能 测试技术 计算机视觉
LongLLaVA:香港中文大学推出的多模态上下文混合架构大语言模型
LongLLaVA是由香港中文大学推出的多模态大型语言模型,采用混合架构,结合Mamba和Transformer模块,旨在高效处理大量图像数据。该模型能够在单个A100 80GB GPU上处理多达1000张图像,通过2D池化技术压缩图像token,显著降低计算成本,同时保留关键的空间关系信息。LongLLaVA在视频理解、高分辨率图像分析和多模态代理等应用场景中展现出卓越的性能。
256 5
LongLLaVA:香港中文大学推出的多模态上下文混合架构大语言模型
|
SQL 存储 关系型数据库
MySQL怎样优化千万级数据
MySQL在处理千万级数据时可能存在性能挑战。本文介绍了几个优化策略来改善查询效率
655 2