复制构造函数未调用

Pno*_*tNP 0 c++ copy-constructor

#include <iostream>


int main(void)
{

class date {
private:
  int day;
  int month;
  int year;
public:
  date( )  { std::cout << "default constructor called" << std::endl; }
  date& operator=(const date& a) { std::cout << "copy constructor called" << std::endl; day=a.day; month=a.month; year=a.year; }
  date(int d ,int m ,int y  ) : day(d),month(m),year(y){ std::cout << "constructor called" << std::endl; }
  void p_date(){ std::cout << "day=" << day << ",month=" << month  << ",year=" << year << std::endl; }
  date& add_day(int d) { day += d; return  *this;}
  date& add_month(int d) { month += d;return  *this; }
  date& add_year(int d) { year += d;return  *this; }

};

class cdate {
  date n;
public:
   cdate(date b) : n(b)  { std::cout << "cdate constructor called" << std::endl;}
   void p_cdate() { n.p_date(); }
};

  cdate ncdate(date(30,1,2012));
  ncdate.p_cdate();
}
Run Code Online (Sandbox Code Playgroud)

当我们ncdate在这段代码中实例化时:

  1. 我们打电话时创建的临时日期对象 cdate ncdate(date(30,1,2012));
  2. 那么我期待调用n = b和期望n的复制构造函数被调用.

n复制构造函数没有被调用,我无法弄清楚为什么.我知道第二个假设有问题. 注意:这只是测试代码,所以不要超过它的性能,可用性等.

Jam*_*lis 5

您尚未为其定义复制构造函数date,因此使用了隐式声明的复制构造函数.

复制构造函数看起来像date(date const& other) { }.您提供了默认构造函数(date())和复制赋值运算符(date& operator=(const date& a)).这些都不是复制构造函数.