类很好地实现了数据的封装,经过隐藏保证了安全性。但上一节的友元函数及静态数据成员、静态函数则是在共享的过程当中增长了数据改变的风险。那怎么能在共享时有效地保护数据。ios
而由C语言的知识咱们知道每每设定常量来防止数据被更改,在C++中也一样有常量的概念。安全
常对象的数据成员在对象的整个生存期间内都不能改变,且必需要初始化。函数
语法声明: const 类型说明符 对象名;spa
class A { public: A(int i,int j):x(i),y(j){} private: int x,y; }; const A a(3,4)
Const修饰的函数为常成员函数。 语法声明:类型说明符 函数名(参数表)constorm
注:1.经过常对象只能调用它的常成员函数,这就是常对象惟一的对外接口方式。对象
2.常成员函数不能更新目的对象的数据成员,与第一点也是相互照应。blog
3.const关键字还能够进行重载函数的区分。接口
#include <iostream> using namespace std; class R { public: R(int r1,int r2):r1(r1),r2(r2){} void print(); void print() const; private: int r1, r2; }; void R::print() { cout << r1 << ":" << r2 << endl; } void R::print()const { cout << r1 << ";" << r2 << endl; //为下文伏笔 } int main() { R a(5, 4); a.print(); const R b(20, 52); b.print(); //此处调用的是带const的函数 return 0; //结果为5:4 20;52 system("pause"); }
若类中说明了常数据成员,那函数不能在经过调用改变它的值。ci
#include <iostream> using namespace std; class A { public: A(int i); void print(); private: const int a; //常数据成员的说明 static const int b; //说明一个类的静态常量 }; const int A::b = 10; //静态常量如果整数或枚举类型,则如此直接声明 A::A(int i) :a(i) {} void A;; print() { cout << a << ":" << b << endl; } int main() { A a1(100), a2(0); a1.print(); a2.print(); return 0; }
const 类型说明符 &引用名;函数声明时用const修饰则不会对实参修改。io
实参为常对象或普通对象时,只能把对象视为常对象。