• C++核心编程——P34+35-空指针返回成员函数+const修饰成员函数


    空指针返回成员函数

    C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针,如果用到this指针,需要加以判断来保证代码的健壮性。

    1. #include
    2. using namespace std;
    3. class Person
    4. {
    5. public:
    6. void ShowClassName()
    7. {
    8. cout << "this is Person class" << endl;
    9. }
    10. void ShowPersonAge()
    11. {
    12. //提高健壮性,空的就直接返回,防止代码崩溃
    13. if (this == NULL)
    14. {
    15. return;
    16. }
    17. //报错原因是因为传入的指针是NULL——无中生有,用一个空指针访问里面的属性
    18. cout << this->m_Age << endl;
    19. }
    20. int m_Age;
    21. };
    22. void test()
    23. {
    24. Person* p = NULL;
    25. p->ShowClassName();
    26. p->ShowPersonAge();
    27. }
    28. int main(void)
    29. {
    30. test();
    31. system("pause");
    32. return 0;
    33. }

    const修饰成员函数

    常函数

    • 成员函数后加const后我们称这个函数为常函数
    • 常函数不可以修改成员属性
    • 成员属性声明时加关键字mutable后,在常函数中依然可以修改

    常对象

    • 声明对象前const称该对象为常对象。
    • 常对象只能调用常函数。
    1. #include
    2. using namespace std;
    3. //常函数
    4. class Person
    5. {
    6. public:
    7. //this指针的本质是指针常量,指针的指向是不可以修改的
    8. //就相当于Person *const this;
    9. //在成员函数后面加const修饰的是this指向,让指针指向的值也不可以修改
    10. //const Person * const this:
    11. void showPerson() const//加个const就不允许修改了
    12. {
    13. this->m_b = 100;
    14. //this = NULL;tbhis指针是不可以修改指针的指向的
    15. }
    16. int m_a;
    17. mutable int m_b;//加了mutable修饰的特殊变量,即使在常函数,常对象中,也可以修改这个值
    18. void func()
    19. {
    20. m_a = 100;//在普通成员函数中是可以修改的
    21. }
    22. };
    23. void test()
    24. {
    25. Person P;
    26. P.showPerson();
    27. }
    28. //常对象
    29. void test1()
    30. {
    31. const Person p;//在对象前加const,变为常对象,对象的属性不可以修改
    32. //p.m_a = 100;
    33. p.m_b = 100;//mutable 关键字修饰了
    34. //常对象只能调用常函数
    35. p.showPerson();
    36. //p.func();常对象不能调用普通成员函数,因为普通成员函数可以修改属性。
    37. }
    38. int main(void)
    39. {
    40. test();
    41. system("pause");
    42. return 0;
    43. }

  • 相关阅读:
    Camera API2使用流程分析
    基于javaweb的在线社区药品销售商城(java+ssm+jsp+bootstrap+mysql)
    必做实验6 输入输出应用
    Scikit-Learn支持向量机分类
    CentOS7.9 安装postgresql
    IE停止维护 导致 @vue/cli-plugin-babel 编译失败
    Java---刷题02
    MATLAB程序设计:牛顿迭代法
    唯一刊登学生历史学术论文的期刊
    前端,关于一个骚气的页面阅读定位图(菜单)
  • 原文地址:https://blog.csdn.net/LDBH66/article/details/133088473