#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();
}
当我们在此代码中实例化ncdate
时:
cdate ncdate(date(30,1,2012));
n = b
和期望n
的复制构造函数。 n
的复制构造函数没有被调用,我无法弄清楚原因。我知道第二个假设有问题。 注意:这只是测试代码,所以不要超过其性能,可用性等。
答案 0 :(得分:5)
您尚未为date
定义复制构造函数,因此使用了隐式声明的复制构造函数。
复制构造函数看起来像date(date const& other) { }
。您提供了默认构造函数(date()
)和复制赋值运算符(date& operator=(const date& a)
)。这些都不是复制构造函数。
答案 1 :(得分:0)
实际上,我没有在你的代码中找到复制构造函数。复制构造函数应声明为日期(日期和时间),您只需声明一个赋值操作。
答案 2 :(得分:0)
这不是复制构造函数,而是operator =。
date& operator=(const date& a) { std::cout << "copy constructor called" << std::endl; day=a.day; month=a.month; year=a.year; }
复制构造函数如下所示:
date(const date& a) { /*... */ }