设为首页 加入收藏

TOP

2014年计算机二级C++复习资料:类的其他几点问题
2017-09-19 12:45:29 】 浏览:4705
Tags:2014年 计算机 二级 复习资料 其他 问题

二级C++辅导笔记:类的其他几点问题


一、拷贝构造函数
拷贝构造函数在下列情况下被调用:用已经存在的对象去初始化同一个类的另一个对象;在函数的参数中,以传值方式传递类对象的拷贝;类对象的值被用做函数的返回值。拷贝构造函数和前面说到的转换构造函数有些相似。转换构造函数是把一个类的对象转化为另一个类的对象;拷贝构造函数是用一个已经存在的对象的值实例化该类的一个新对象。
  不同对象间的初始化和赋值的区别:赋值操作是在两个已经存在的对象间进行的;而初始化是要创建一个新的对象,并且其初值来源于另一个已存在的对象。编译器会区别这两种情况,赋值的时候调用重载的赋值运算符,初始化的时候调用拷贝构造函数。
  如果类中没有拷贝构造函数,则编译器会提供一个默认的。这个默认的拷贝构造函数只是简单地复制类中的每个成员。
   #include iostream.h
   #include string.h
   class Date
   {
   int mo, da, yr;
   char* month;
   public:
   Date(int m = 0, int d = 0, int y = 0);
   Date(const Date &);
   ~Date();
   void display() const;
   };
   Date::Date(int m, int d, int y)
   {
   static char* mos[] =
   {
   January, February, March, April, May, June,
   July, August, September, October, November, December
   };
   mo = m; da = d; yr = y;
   if (m != 0)
   {
   month = new char[strlen(mos[m-1])+1];
   strcpy(month, mos[m-1]);
   }
   else
   month = 0;
   }
   Date::Date(const Date & dt)
   {
   mo = dt.mo;
   da = dt.da;
   yr = dt.yr;
   if (dt.month != 0)
   {
   month = new char [strlen(dt.month)+1];
   strcpy(month, dt.month);
   }
   else
   month = 0;
   }
   Date::~Date()
   {
   delete [] month;
   }
   void Date::display() const
   {
   if (month != 0)
   cout << month <<' '<< da << , << yr << std::endl;
   }
   int main()
   {
   Date birthday(6,24,1940);
   birthday.display();
   Date newday = birthday;
   newday.display();
   Date lastday(birthday);
   lastday.display();
   return 0;
   }
  本例中,用到了两次拷贝构造函数。一个是使用普通的C++初始化变量的语句:
   Date newday = birthday;
  另一个是使用构造函数的调用约定,即把初始化值作为函数的参数:
   Date lastday(birthday);


热点信息关注:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇2014年计算机二级C++复习资料:重.. 下一篇2014年计算机二级C++复习资料:类..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目