c++常量成员函数/编写规则 实例

文章目录

Note

  • 常量对象上可以执行常量成员函数,是因为常量成员函数确保不会修改任何非静态成员变量的值。
  • 编译器如果发现常量成员函数内出现了有可能修改非静态成员变量的语句,就会报错。
  • 因此,常置成员函数内部也不允许调用类的其他非常置成员函数(静态成员函数除外)。
  • 在您可能犯这类错误时,IDE可能会提示您!
// program 12.5.1.cpp 常量成员函数
#include <iostream>
using namespace std;
class Sample
{
int a;
public:
Sample() : a(-1) {} // constructor;构造函数的括号初始化成员变量法即(a=-1)
/* 常量成员函数不允许修改成员变量;所有成员变量对于常量成员函数都是只读(而不可改写的) */
void GetValue() const; //常量成员函数声明
/*普通成员函数*/
void test();
/* testConst */
void testConst() const;
};
/* 常量成员函数 */
void Sample::GetValue() const
{
cout << "GetValue() const member function was called!@" << endl;
// a += 5;/* 所有成员变量对于常量成员函数都是只读(而不可改写的) */
cout << "obj.a=" << a << endl;
}
/*普通成员函数(not a const member function)*/
void Sample::test()
{
cout << "test() was called!" << endl;
cout << "obj.a=" << a << endl;
};
void Sample::testConst() const
{
// a += 5;//即使在常量成员函数中,您也不可以试图做修改操作,仅仅可以读取值,编译器会检查这一点(IDE也可以做出提示)
cout << "testConst() was called!" << endl;
cout << "obj.a=" << a << endl;
};
int main()
{
const Sample obj; //定义Sample的一个常量对象obj
obj.GetValue(); //常量对象上可以执行常量成员函数
// obj.test(); //常量对象拒绝普通成员函数的访问;expected error!
obj.testConst();
return 0;
}
/*常量对象上可以执行常量成员函数,是因为常量成员函数确保不会修改任何非静态成员变量的值。编译器如果发现常量成员函数内出现了有可能修改非静态成员变量的语句,就会报错。因此,常置成员函数内部也不允许调用同类的其他非常置成员函颤(静态成员函数除外)。*/
posted @   xuchaoxin1375  阅读(17)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2022-08-15 css_float_浮动的认识和使用
点击右上角即可分享
微信分享提示