类的成员函数

目录

类的成员函数

const成员函数

可变数据成员(mutable)

this

返回自身的引用


类的成员函数

成员函数是定义为类的一部分的函数, 有时也被称为方法( method ) 。 我们通常以一个类对象的名义来调用成员函数。

使用点运算符(.)来表达我们需要“某对象的某成员” 。点运算符只能用 于类类型的对象。其左侧运算对象必须是一个类类型的对象,右侧运算对象必须是该类型 的一个成员名,运算结果为右侧运算对象指定的成员。

当用点运算符访问一个成员函数时,通常我们是想(效果也确实是)调用函数。我 们使用调用运算符(())来调用一个函数。调用运算符是一对圆括号,里面放置实参 (argwnent) 列表(可能为空)。

下面是调用成员函数示例

#include<iostream>

#include<string>

using namespace std;



class Time

{

public:

    int hour;

    int minute;

    int seconds;



    void Timeinit(int h, int m, int s)

    {

        hour = h;

        minute = m;

        seconds = s;

    }

};



int main()

{

    Time b;

    b.Timeinit(11, 10, 20);



    return 0;

}

const成员函数

把 const 关键字放在成员函数的参数列表之后,表示这个成员函数不会修改该对象里任何成员变量的值。像这样使用 const 的成员函数被称作常量成员函数

  1. const不仅在声明中,函数实现中也要带上。
  2. const成员函数无论是不是const对象都可以调用,而非const成员函数只能由非const对象调用,const对象不能调用

使用范例:

Time.h

class Time

{

public:

   

    int minute;

    int hour;

    int second;

private:

    int millisecond;



public:

    Time(int tmphour, int tmpmin, int tmpsec);

    Time(int tmphour, int tmpmin);

    Time();



    void addhour(int addh) const;

    void non_const(){}



};

Time.cpp

void Time::addhour(int addh) const

{

    //hour += addh;//错误不能修改成员变量的值

}

void func6()

{

    const Time ct1(12, 12, 15);

    Time t1(1, 1, 1);

    ct1.non_const();//错误,const对象不能调用非const成员函数

    t1.non_const();s

}



void non_m_func() const//错误,const只能修饰成员函数

{



}

可变数据成员(mutable)

有时,我们希望能修改类的某个数据成员,即使是在一个const成员函数内。可以通过在变量的声明中加入mutable关键字做到这一点。

一个可变数据成员(mutable data member)永远不会是const,即使它是const对象的成员。因此,一个const成员函数可以改变一个可变成员的值。

Time.h

class Time

{

public:

   

    int minute;

    int hour;

    int second;

    mutable int testvalue = 0;



public:

    Time(int tmphour, int tmpmin, int tmpsec);

 

    void testmutable() const;

};

Time.cpp

void Time::testmutable() const

{

    testvalue += 10;

    hour += 10;//错误,不能在const成员函数内修改非mutable成员变量

}

this

在调用成员函数时,编译器负责把该对象的地址传递给这个成员函数中的一个隐藏的this形参。在成员函数内部,任何对类成员的直接访问都被看 作this的隐式引用,也就是说this->meber(代表类成员)等价于meber(代表类成员)。

this指针只能在成员函数中使用,this是一个常量指针

在普通成员函数中,this是指向非const对象的const指针(类型为Time,那么this就是只能指向当前Time对象)

在const成员函数中,this指针是一个指向const对象的const指针(类型为Time,this就是const Time*const this类型的指针)

返回自身的引用

Time.h

class Time

{

public:

   

    int minute;

    int hour;

    int second;



public:

    Time(int tmphour, int tmpmin, int tmpsec);



    Time& addmin(int tmpmin);

};

Time.cpp

Time& Time::addmin(int tmpmin)

{

    minute += tmpmin;

    return *this;

}

test.cpp

void func7()

{

    Time t1;

    t1.addmin(3);

}

通过调试我们可以看到对象t1的地址和传到成员函数addmin中的this的值是一样的。

另外如果形参和某个成员变量名字一致时,我们也可以使用this做出区分:

Time& Time::addsec(int second)

{

    second = second;//两个都被当作形参,这句代码无作用

    this->second = second;//正常赋值

    return *this;

}

参考书籍:

C++ Primer中文版 第5版作 者: (美)李普曼(Lippman,S.B.),(美)拉乔伊(Lajoie,J.),(美)默(Moo,B.E.) 著 王刚,杨巨峰 译,出版社: 电子工业出版社,ISBN: 9787121155352

本文是学习过程中参照C++primer结合自己的理解所写的笔记,如有纰漏还请指出,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值