成员函数

简介: 成员函数

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的

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

相关文章
|
1天前
|
C++
C++程序中的类成员函数
C++程序中的类成员函数
7 1
|
1天前
|
编译器 C++
C++程序中的派生类析构函数
C++程序中的派生类析构函数
9 2
|
1天前
|
编译器 C++
C++程序中的派生类构造函数
C++程序中的派生类构造函数
5 1
|
6天前
友元函数、成员函数和普通函数使用上的不同
友元函数、成员函数和普通函数使用上的不同
7 0
|
6天前
|
编译器 C++
27类的成员函数
27类的成员函数
16 0
运算符重载的函数作为类的成员函数和友元函数
🐰运算符重载的函数作为类的成员函数和友元函数 🌸运算符重载定义为类的成员函数 🌸运算符重载函数作为类的友元函数 🌸实现“+”,“-“的普通重载函数和友元重载函数 🌸单目运算符"++"和"--"的重载
【C++之成员函数】类外定义成员函数
【C++之成员函数】类外定义成员函数
|
编译器 C++
C++——this指针和析构函数
C++——this指针和析构函数
C++——this指针和析构函数
|
存储 编译器 C语言
【三、类中的静态成员】静态成员变量与静态成员函数(static关键字、this指针)
【三、类中的静态成员】静态成员变量与静态成员函数(static关键字、this指针)
127 0