#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(); } When we instantiate ncdate in this code:
- temporary date object created when we call
cdate ncdate(date(30,1,2012)); - then i expect the call
n = band expectn's copy constructor to be called.
n's copy constructor is not getting called and i cant figure out why. I know there is something wrong in the 2nd assumption. Note: this is test code only so don't go over its performance, usability etc.