1.const成员
将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数 隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。
#include<iostream>
using namespace std;
class Date
{
public:
Date(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
void Print()
{
cout << "Print()" << endl;
cout << "year:" << _year << endl;
cout << "month:" << _month << endl;
cout << "day:" << _day << endl << endl;
}
void Print() const
{
cout << "Print()const" << endl;
cout << "year:" << _year << endl;
cout << "month:" << _month << endl;
cout << "day:" << _day << endl << endl;
}
private:
int _year; // 年
int _month; // 月
int _day; // 日
};
void Test()
{
Date d1(2022, 1, 13);
d1.Print();
const Date d2(2022, 1, 13);
d2.Print();
}
int main()
{
Test();
return 0;
}
注意:const对象不能调用非const成员函数,非const对象可以调用const成员函数;const成员函数内不能调用其它非const成员函数,非const成员函数内可以调用其他的const成员函数。
2.初始化列表
以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟 一个放在括号中的初始值或表达式。
注意:1.初始化列表是成员定义的地方,不论写不写,自定义类型成员都要走初始化列表;
2.它是构造函数的一部分;
3.每个成员变量在初始化列表中只能出现一次,且引用成员变量,const成员变量,自定义类型成员(无默认构造)必须在初始化列表初始化;
4.初始化顺序只与声明顺序有关,与其在初始化列表的顺序无关。
class A
{
public:
A(int a)
:_a(a)
{}
private:
int _a;
};
class B
{
public:
B(int a, int ref)
:_aobj(a)
, _ref(ref)
, _n(10)
{
cout << "B" << endl;
}
private:
A _aobj; // 没有默认构造函数
int& _ref; // 引用
const int _n; // const
};