/*
共享数据的保护:
常类型(指使用类型修饰符const说明的类型)的引入,就是为了
既保护数据共享又防止数据被改动
此例含有:
1、常引用
2、常对象
3、常对象成员:
i.常数据成员
ii.常成员函数
*/
/*
常引用:
#include <iostream>
using namespace std;
int add(const int &i, const int &j);
int main()
{
int a=20;
int b=30;
cout<<a<<"+"<<b<<"="<<a+b<<endl;
return 0;
}
int add(const int &i, const int &j)
// 函数add()的形参是常引用,因此
{
i = i + 30; // 不允许改变i的值
j = j - 10; // 不允许改变j的值
return (i+j);
}
*/
#include <iostream>
using namespace std;
class Date
{
private:
const int year;
const int month;
const int day;
public:
Date(int y,int m,int d); // 类Date的构造函数声明
/*此处声明了2个同名函数showDate(),它们是重载的。可见,关键字 const可以被用于对重载函数进行区分。*/
void showDate(); // 普通成员函数声明
void showDate() const; // 常成员函数声明
};
/* C++规定只能通过构造函数的成员初始化列表对常数据成员进行初始化 */
Date::Date(int y,int m,int d):year(y),month(m),day(d)
{}
void Date::showDate() // 普通成员函数定义
{
cout<<"调用普通成员函数显示日期:"<<endl;
cout<<year<<"."<<month<<"."<<day<<endl;
}
void Date::showDate() const // 常成员函数定义
{
cout<<"调用常成员函数显示日期:"<<endl;
cout<<year<<"."<<month<<"."<<day<<endl;
}
int main()
{
// 普通对象定义
Date date1(2016,3,15);
date1.showDate();
// 常对象定义
const Date date2(2016,3,16);
date2.showDate();
return 0;
}
注:
普通成员函数
- 对普通数据成员,可以访问,可以改变值
- 对常数据成员,可以访问,但不可以改变值
- 对常对象的数据成员,不允许访问和改变值
常成员函数
- 对普通数据成员,可以访问,但不可以改变值
- 对常数据成员,可以访问,但不可以改变值
- 对常对象的数据成员,可以访问,但不可以改变值