成员函数

举报
无敌清风蓝 发表于 2023/08/31 21:56:35 2023/08/31
【摘要】 成员函数

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的

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

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。