3.10 常类型
3.10.1 常引用
(1)形式:const 类型 & 引用名;
(2)常参数:常引用用作函数参数
(3)作用:用常引用做参数能够避免实参的更改,保证数据的安全
3.10.2 常对象
(1)形式:类名 const 对象名【(参数表)】;
或者
const 类名 对象名【(参数表)】;
(2)定义对象时必须进行初始化,而且不能被更新
(3)常对象不允许调用普通的常成员函数
(3)示例:
#include<iostream>
using namespace std;
class Sample{
public:
Sample(int i):n(i)
{
}
void setvalue(int i){
n=i;
}
void display() {
cout<<"n = "<<n<<endl;
}
private:
int n;
};
int main()
{
Sample const p(10); //定义初始化常对象
//a.setvalue(20); //非法更改n的值
p.display();
return 0;
}
【发生错误】原因:普通函数不允许访问常对象的数据成员
3.10.3 常对象成员
1、常数据成员
(1)常数据成员,构造函数就只能通过成员初始化列表对该数据初始化,而其他任何函数都不能对该成员赋值
#include<iostream>
using namespace std;
class Date{
public:
Date(int y,int m,int d);
void showDate();
private:
const int year; //常数据成员
const int month; //常数据成员
const int day; //常数据成员
};
Date::Date(int y,int m,int d):year(y),month(m),day(d){ //成员初始化列表,对常数据成员赋值
}
void Date::showDate()
{
cout<<year<<"."<<month<<"."<<day<<endl;
}
int main()
{
Date date1(1998,1,16);
date1.showDate();
return 0;
}
2、常成员函数
(1)形式:类型说明符 函数名(参数表)const;
常成员函数和普通成员函数的访问特性比较
数据成员
普通成员函数
常成员函数 普通数据成员 可以访问,可以改变值 可以访问,不可以改变值 常数据成员 可以访问,不可以改变值 可以访问,不可以改变值 常对象的数据成员 不可以访问,不可以改变值 可以访问,不可以改变值
(2)示例
#include<iostream>
using namespace std;
class Date{
public:
Date(int y,int m,int d);
void showDate();
void showDate() const; //定义常成员函数
private:
const int year;
const int month;
const int day;
};
Date::Date(int y,int m,int d):year(y),month(m),day(d){
}
void Date::showDate()
{
cout<<"showDate1:"<<endl;
cout<<year<<"."<<month<<"."<<day<<endl;
}
void Date::showDate() const //初始化常成员函数
{
cout<<"showDate2:"<<endl;
cout<<year<<"."<<month<<"."<<day<<endl;
}
int main()
{
Date date1(1998,1,16);
date1.showDate();
const Date date2(2008,1,16); //定义初始化常对象
date2.showDate();
return 0;
}
运行结果: