c++ - 页面 :224 Stroustrup - C++ Programming Language, 3E

标签 c++

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/

相关文章:

c++ - 在 OpenCV 中乘以矩阵的 SVD 分量

c++ - 可移植写入器-读取器自旋锁

c++ - 在使用 boost::spirit 进行解析时,我如何假定 "default value"?

c++ - OpenGL : multiple VAOs for one VBO

c++ - 什么可能导致无限循环错误

c++ - 以下内容是否确实违反了 ODR?

c++ - 我如何组织 C++ 代码而不用过多考虑某些内容是否已模板化?

c++ - 删除链表中的特定节点

c++ - 如何在 C++ 中编辑操作码或写入内存或编辑字节?

c++ - 从 C++ 库通知 Objective C