如何设置多个默认构造函数

时间:2013-11-26 15:28:29

标签: c++ class constructor

我正在学习C ++中的构造函数,我知道你可以声明多个构造函数。您可以在下面看到我下面有2个Date构造函数,但我想将Date(long)设置为默认构造函数。有人可以解释我会怎么做?

好的,显然上面的问题很有道理。我正在从书中解决问题,这就是它所说的:

  

修改程序10.3,以便该类的唯一数据成员是名为yyyymmdd的长整数。通过替换声明long yyyymmdd来做到这一点;对于这些现有的声明:

     

int月;     int day;     int year;

     

使用当前在类声明部分中声明的相同构造函数原型,重写它们以使Date(long)方法成为默认构造函数,Date(int,int,int)方法转换月,日和年进入类数据成员的正确形式。

计划10.3:

#include <iostream>
#include <iomanip>
using namespace std;

class Date
{
    private:
        int month, day, year;
    public:
        Date(int=7, int=4, int=2012);
        Date(long);
        void showDate();
};

Date::Date(int mm, int dd, int yyyy)
{
   month = mm;
   day = dd;
   year = yyyy;
}

Date::Date(long yyyymmdd)
{
    year = int(yyyymmdd/10000);
    month = int( (yyyymmdd - year*10000)/100);
    day = int(yyyymmdd - year*10000 - month*100);
}

void Date::showDate()
{
    cout << "The date is "
         << setfill('0')
         << setw(2) << month << '/'
         << setw(2) << day << '/'
         << setw(2) << year % 100;
    cout << endl;
}

int main()
{
    Date a;
    Date b(4,1,1998);
    Date c = Date(20090515L);

    a.showDate();
    b.showDate();
    c.showDate();
    return 0;
}

2 个答案:

答案 0 :(得分:3)

您拥有的月/日/年构造函数的默认值使其成为默认构造函数(您可以在没有参数的情况下调用它。您要做的是取消默认值,并将参数默认为{{1}构造函数:

long

答案 1 :(得分:1)

您无法设置默认构造函数。根据定义,默认构造函数是可以不带参数调用的构造函数。

如果在创建对象时没有(或不能)指定参数,则会自动使用它。

例如,如果您定义了一个对象数组,那么所有这些对象都将使用默认构造函数构建

Date dates[5]; // Will create 5 Dates using Date::Date(7, 4, 2012)