编程高手之路--C++入门—类的其他几点问题.doc

编程高手之路--C++入门—类的其他几点问题.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编程高手之路--C入门—类的其他几点问题

编程高手之路-- 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); 二、类的引用 在函数参数和返回值中,如果一定要使用传值方式,那么使用类对象的引用,是一个提高效率的方法。 类的数据成员也可以是一个引用,但必须注意:第一,一个引用必须初始化。通常一个类对象并不会像结构那样用大括号来初始化,而是调用构造函数。因此在构造函数里必须初始化类当中的引用成员。第二,引用是一个别名。尽管类里面的引用在使用方式上看起来和类的一般数据成员没有什么区别,但是作用在其上的操作,实际上是对用来初始化它的那么对象进行的。 #include iostream.h class Date { int da, mo, yr; public: Date(int d,int m,int y) { da = d; mo = m; yr = y; } void Display() const { cout da / mo / yr; } }; class Time { int hr, min, sec; public: Time(int h, int m, int s) { hr = h; min = m; sec = s; } void Display() const { cout hr : min : sec; } }; class DateTime { const Date dt; const Time tm; public: DateTime(const Date d, const T

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档