类相关的技术细节 -15

  • 参数类型

定义枚举型变量:

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值