struct Date {
int d, m , y;
void init_date(Date& d, int, int, int);
void add_year(int n);
void add_month(Date& d, int n);
void add_day(Date& d, int n);
}
Date my_birthday;
void f()
{
Date today;
today.init(16, 10, 1996);
my_birtday.init(30, 12, 1950);
Date tomorrow = today;
tomorrow.add_day(1);
// ...
}
问题 A:在上面的代码片段中,不是: 明天的日期 = 今天; 在没有提供“复制构造函数”的意义上是错误的 结构日期。我知道有一个“默认构造函数”自动生成 编译器 - 但我不确定它到底做了什么或它到底是怎么做的 有效(它可以调用成员类的默认构造函数,但它 不初始化:int i;之类的东西)。有人可以澄清一下 编译器的默认构造函数是如何工作的?
问题 B:我们必须插入如下内容: const Date& Date(const Date& r); 正确的?但是,上面的构造函数暗示我们传递给它一个参数(一个 引用“今天”)。那么,如何进行“初始化”:“Date tomorrow = today” 转换为函数调用:Date tomorrow(today); 有没有 “魔法”在这里发生??
问题C:运算符的格式是什么,new? Stroustrup 使用它 以不同的方式,但没有明确列出其所有用途。到目前为止我 能找到: 新的 ; 新类型[尺寸]; 新类型(尺寸); 新型; 这是在任何地方列出/给出的吗?我错过了什么吗?
最佳答案
A) 默认的拷贝构造函数做一个浅拷贝。由于您只有 POD 类型,它会按照您期望的方式运行,因此它是正确的。
B) const Date& Date(const Date& r);
错误。 Data::Date
是构造函数,它不能是 const
或具有返回类型。如果你想实现一个复制构造函数,只需编写 Date(const Date& r)
,但在这种情况下你不需要一个。
Date tomorrow = today;
与
相同Date tomorrow(today);
调用的是拷贝构造函数,不是函数。
C) 大主题,用 google 搜索 new
关键字,我相信它有很好的文档记录。您使用 new
在动态存储中分配内存。
关于c++ - 页面 :224 Stroustrup - C++ Programming Language, 3E,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9599556/