- 参数类型
定义枚举型变量:
enum class Month{
jan = 1, feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec
};
需要注意的是,在使用时,以
Month::mar
来进行使用而不是
Month.mar
因为Month不是一个对象,而是一个类型。mar也不是一个数据成员,而是一个枚举量,一个符号常量。
因此,在类名、枚举命或者名字空间名后用 ::,在对象名后面用使用 .
- 默认构造函数
定义一个构造函数,不需要显式提供初始化代码,就能创建对象。这种构造函数不接受参数。
例子:
class Date{
public:
//...
Date();//默认构造函数
//...
private:
int y;
Month m;
int d;
};
Date::Date()
:y{2001},m{Month::jan},d{1}
{}
为了避免使用全局变量带来的初始化问题:
const Date& default_date()//定义一个返回值类型为Date类型的函数(引用)
{
static Date dd{2001,Month::jan,1};
return dd;
}
在这里使用static,这样变量dd就不会每次调用default_date()时都被创建,只是在第一次调用时被创建并被初始化。当有了这个函数以后,再为Date创建一个默认构造函数就比较简单了:
Date::Date()
:y{default_date().year()},
m{default_date().month()},
d{default_date().day()}
{}
- const成员函数
class Date{
public:
int day() const;
Month month() const;
int year() const;
void add_day(int n);
void add_month(int n);
void add_year(int n);
private:
int y;
Month m;
int d;
};
Date d {2000, Month::jan, 20};
const Date cd{2001,Month::feb, 21};
cout<<d.day()<<cd.day()<<'\n';
d.add_day(1);//正确
cd.add_day(1);//错误,cd为常量
当我们创建函数时,如果不希望去修改它,则可以在定义的时候在右边协商const
int Date::day() const
{
++d;//错误:试图从常量成员中改变对象
return d;
}