类的成员函数

女排世界杯冠军7742025-06-23 20:27:07

目录

类的成员函数

const成员函数

可变数据成员(mutable)

this

返回自身的引用

类的成员函数

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

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

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

下面是调用成员函数示例

#include

#include

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 的成员函数被称作常量成员函数

const不仅在声明中,函数实现中也要带上。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结合自己的理解所写的笔记,如有纰漏还请指出,谢谢

王者荣耀李元芳KPL皮肤即将到来,最低到手价格介绍
功夫贷审核通过多久到账

热门文章

友情链接