【发布时间】:2013-11-26 15:28:29
【问题描述】:
我正在学习 C++ 中的构造函数,并且我知道您可以声明多个构造函数。您可以在下面看到我下面有 2 个 Date 构造函数,但我想将 Date(long) 设置为默认构造函数。有人可以解释一下我会怎么做吗?
好吧,显然上面的问题很有意义。我正在解决书中的一个问题,这就是它所说的:
修改程序 10.3,使该类的唯一数据成员是一个名为 yyyymmdd 的长整数。通过替换声明 long yyyymmdd 来做到这一点;对于这些现有声明:
int 月份; 整数天; 整数年;
使用当前在类声明部分中声明的相同构造函数原型,重写它们,使 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;
}
【问题讨论】:
-
什么是默认构造函数?
-
这没有意义。编译器根据您提供的参数选择要调用的构造函数。指定“默认构造函数”会做什么?
-
最多可以有一个不带必需参数的构造函数,包括在那个池中带all可选参数的构造函数。从字面上看,您的要求毫无意义。您通过满足该要求一次来选择哪个是“默认”。
-
默认构造函数是没有参数的构造函数。看到这个答案。 stackoverflow.com/a/4836611/651848
-
@rkyser 没有参数的构造函数和需要没有参数的构造函数是有区别的。后者不代表前者,但前者肯定符合后者。
标签: c++ class constructor