设为首页 加入收藏

TOP

4.2.4 重载构造函数与拷贝构造函数
2013-10-07 01:17:21 来源: 作者: 【 】 浏览:67
Tags:4.2.4 重载 构造 函数 拷贝

4.2.4  重载构造函数与拷贝构造函数

C++(www.cppentry.com)允许重载构造函数,所谓的重载构造函数是指允许在类中有多个构造函数。当然这些构造函数肯定是有区别的。各个构造函数必须拥有不同的参数个数或者参数类型。

【示例4.14】 定义类classexample有3个构造函数,代码如下所示。

  1. class classexample  
  2. {  
  3. public:  
  4.     classexample();         //构造函数1,此函数没有参数  
  5.     classexample(int);      //构造函数2,有一个整型参数  
  6.     classexample(int,int);  //构造函数3,有两个整型参数  
  7.      …  

分析:上面的例子中类classexample有3个构造函数,在定义对象时,根据不同的参数调用相应的构造函数。

【示例4.15】 利用重载构造函数创建对象,在定义对象时,如果使用有参数的构造函数,那么必须指定参数值。定义对象时就可以调用相应的构造函数。

  1. #include <iostream.h>  
  2. class classexample  
  3. {  
  4. private:  
  5.     int i; double d;  
  6. public:  
  7.     classexample()                          //构造函数1  
  8.     {  
  9.         i=0;d=0.0;  
  10.     }  
  11.     classexample(int numi)                      //构造函数2  
  12.     {  
  13.         i=numi; d=0.0;  
  14.     }  
  15.     classexample(int numi,double numd)      //构造函数3  
  16.     {  
  17.         i=numi;  
  18.         d=numd;  
  19.     }  
  20.     void print()  
  21.     {  
  22.         cout<<"i="<<i<<" "<<"d="<<d<<endl;  
  23.     }  
  24. };  
  25. void main()  
  26. {  
  27.     classexample A;                         //调用构造函数1  
  28.     classexample B(3);                      //调用构造函数2  
  29.     classexample C(3,2.2);                  //调用构造函数3  
  30.     A.print();                              //调用类的成员函数  
  31.     B.print();  
  32.     C.print();  
  33.  

分析:上面的代码中首先定义一个类,并且对构造函数进行重载,在定义对象时,则会根据具体的参数选择合适的构造函数建立对象。上面程序的输出结果如下:

  1. i=0 d=0  
  2. i=3 d=0  
  3. i=3 d=2.2 

前面介绍了重载构造函数的基本用法。在类中还存在一种构造函数,称为拷贝构造函数。拷贝构造函数是依据已经存在的对象建立新的对象,该构造函数的性质有以下几点:

函数名称和类名一样。

每个类都有一个拷贝构造函数,如果程序中没有显示定义,编译系统会自动生成一个拷贝构造函数。

拷贝构造函数有一个参数,是类的对象的引用。

【示例4.16】 利用拷贝构造函数实现point类的新对象,且把横纵坐标互换加倍。

  1. #include"iostream.h"  
  2. #include"math.h"  
  3. class point                   
  4. {  
  5. private:  
  6.     int x;int y;  
  7. public:  
  8.     float distance()                //类的成员函数  
  9.     {  
  10.         return sqrt(x*x+y*y);  
  11.     }  
  12.     point(int a,int b)          //构造函数  
  13.     {  
  14.         x=a;y=b;  
  15.     }  
  16.     point(const point &p)       //拷贝构造函数  
  17.     {  
  18.         x=2*p.y;y=2*p.x;  
  19.     }  
  20.  
  21. };  
  22. void main()  
  23. {  
  24.     point A(4,5);               //调用构造函数  
  25.     point B(A);                 //调用拷贝构造函数  
  26.     cout<<A.distance()<<"   "<<B.distance()<<endl;;  

分析:上面的拷贝构造函数是代入法,除此之外还可以采用赋值法。即利用赋值语句实现。如果用户未定义拷贝构造函数,那么系统会利用默认的拷贝构造函数实现赋值。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.1.1 从结构到类 下一篇4.4.1 派生类的引出

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: