您的位置:首页 > 其它

类相关的技术细节 -15

2017-11-06 14:44 288 查看
参数类型

定义枚举型变量:

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:

4000
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: