博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ this指针和const成员函数
阅读量:5135 次
发布时间:2019-06-13

本文共 1551 字,大约阅读时间需要 5 分钟。

this指针

  1. this指针:成员函数通过一个名为this的隐式形参来访问调用它的那个对象。this由调用该成员函数的对象的地址初始化。
    1 Sales_data total; 2 total.isbn(); //等价于Sales_data::isbn(&total),编译器负责把total的地址传递给isbn的隐式形参this
  2. this是一个常量指针,因为this总是指向“这个”对象,不允许改变this中保存的地址。

const成员函数:

  1. 来源:默认情况下,this是指向类类型非常量版本的常量指针,尽管this是隐式形参,但也需要遵循初始化准则,在默认情况下不能把this绑定到一个常量对象上(普通指针不能指向常量),即我们不能在一个常量对象上调用普通的成员函数。因此,设计类的一个准则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const。
    (1)有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函数前面或者参数表内),只能读取数据成员,不能改变数据成员;没有 const 修饰的成员函数,对数据成员则是可读可写的。
    (2)除此之外,在类的成员函数后面加 const 还有什么好处呢?那就是常量(即 const)对象可以调用 const 成员函数,而不能调用非const修饰的函数。
  2. 在C++中,只有被声明为const的成员函数才能被一个const类对象调用。
  3. const成员函数可以访问非const对象的非const数据成员,const数据成员,也可以访问const对象内的所有数据成员。
  4. 非const成员函数只可以访问非const对象的任意的数据成员(不能访问const对象的任意数据成员)。
  5. 作为一种良好的编程风格,在声明一个成员函数时,若该成员函数并不对数据成员进行修改操作,应尽可能将该成员函数声明为const 成员函数。
  6. const成员函数可以被对应的具有相同形参列表的非const函数重载:如果只有const成员函数,非const对象是可以调用const成员函数的。当const版本和非const版本的成员函数同时出现时,非const对象调用非const成员函数。
    #include
    using namespace std;class A{public: void f() { cout << "not const" << endl; } void f() const { cout << "const" << endl; }};int main(){ A a; cout << "a: "; a.f(); const A &b = a; cout << "b: "; b.f(); const A *c = &a; cout << "c: "; c->f(); A *const d = &a; cout << "d: "; d->f(); A *const e = d; cout << "e: "; e->f(); const A *f = c; cout << "f: "; f->f(); return 0;} //output:

        a: not const

        b: const
        c: const
        d: not const
        e: not const
        f: const

     

     

转载于:https://www.cnblogs.com/betaa/p/10577960.html

你可能感兴趣的文章
pair的例子
查看>>
前端框架性能对比
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
12.2日常
查看>>
同步代码时忽略maven项目 target目录
查看>>
Oracle中包的创建
查看>>
团队开发之个人博客八(4月27)
查看>>
发布功能完成
查看>>
【原】小程序常见问题整理
查看>>
C# ITextSharp pdf 自动打印
查看>>
【Java】synchronized与lock的区别
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>