现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

C++中const修饰的成员函数

2019-05-20 05:51 工业·编程 ⁄ 共 898字 ⁄ 字号 暂无评论

一.const修饰成员函数的格式

在成员函数的后边加上const

    void display() const

{

swap(5);

cout << "display()" << endl;

}

二.const修饰成员函数的原理

2.1.原理

const修饰成员函数时是修饰成员函数的this指针所指向的对象,也就是保证在调用这个const成员函数的对象时不会被改变。

注意:const是修饰this指针所指向的对象

2.2.编译器对const成员函数的处理(图解)

2019052001

三.问题

3.1. const对象可以调用const修饰的成员函数,和非const修饰的成员函数吗?

const对象可以调用const修饰的成员函数,不能调用非cosnt修饰的成员函数。

原因:

class A

{

public:

void show()

{

cout << "show()" << endl;

}

void display() const

{

cout << "display()" << endl;

}

};

int main()

{

const A a;

//a.display();

a.show();

system("pause");

return 0;

}

我们知道c++在类的成员函数中还会隐式传入一个指向当前对象的this指针,所以在A类中,

实际的show函数应该是这样的void show(show * this)

实际的display函数应该是 void display(const display* this)

这时a对象的指针就会传递给show*this,但是a的地址被翻译为指针类型应该是const show* this,这里会出现类型不匹配的错误,在visual studio 中会出现类似于上面的错误。这里的display函数可以调用成功是因为他们参数的类型匹配。

3.2.非const对象可以调用const修饰的成员函数,和非const修饰的成员函数吗?

非const对象可以调用const修饰的成员函数,和非const修饰的成员函数

这是因为在c++中其实是有最小权限原则,非const对象是可以调用const成员函数的

3.3.const成员函数不能调用非const成员函数

3.4.非const成员函数能调用const成员函数

给我留言

留言无头像?