const在类中的作用
const在类中可以保证成员变量和对象不被改变。
const添加在函数声明之后
我们以Date类为例
class Date
{
public:
//全缺省构造函数
Date(int year = 2000, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
}
Date(const Date& d)
{
_year = d._year;
_month = d._month;
_day = d._day;
}
//print函数的括号之后添加const关键字
void print()const
{
cout << _year << '-' << _month << '-' << _day << endl;
}
~Date(){}
private:
int _year;
int _month;
int _day;
};
加了const之后,若我们在print函数中想改变_year/_month/_day这些成员变量,编译器会报错!
const添加在形参之前
就用上面的拷贝构造函数为例子。
经过const修饰后,d的一切都不可改变。
&的作用
学过c的朋友们千万要分清&的用法,别和c++的&搞混!!
c++类中的&一般是表示引用而不是取地址
&用在函数返回类型中
我们以下面这个类为例子
class A
{
public:
A(int a = 0)
{
_a = a;
}
~A(){}
//注意这里的&
A& operator++()
{
++_a;
return *this;
}
int Get_a()
{
return _a;
}
private:
int _a;
};
int main()
{
A b(1);
cout << b.Get_a() << endl;
++b;
cout << b.Get_a() << endl;
}
我们重载前置++运算符时,返回的类型是A&。
因为我们要改变的是b这个对象自己,改变的是b._a的值,需要返回b对象本身,
return *this。
所以返回的类型是A&,
引用&的本质就是给一个东西起其他的名字,但是新名字也会永远指向那个东西。
&用在形参之前
一般来说,当我们传参的类型有类对象时,形参都建议写成引用的类型。(防止出现无穷递归的情况)。
拷贝构造函数是一定一定要写成引用的形式:类名+&+形参名