C++构造函数的使用

1.构造函数名字必须与类名同名,不具有类型,不返回任何值,不需要用户调用,一般声明为public, 构造函数可以类内定义也可以类外定义。
2.不带参数的构造函数

 class Box
 {
 public:
     Box();
     int volume();
 private:
     int height;
     int width;
     int length;
 };
 Box::Box()    //不带参数的构造函数
 {
  height = 10;
  width  = 10;
  length = 10; 
 }

3.用参数初始化表对数据成员初始化

 class Student
 {
 public:
     Student(int n,char s,char nam[]):num(n),sex(s){strcpy(name,nam)};
     int volume();
 private:
     int num;
     int sex;
     int name[20];
 };
 可以这样定义对象stud1:
 Student stud1(10101,'m',"Wang_li");

4.构造函数的重载

 class Box
 {
 public:
     Box();
     Box(int h,int w,int len):height(h),width(w),length(len){}
     int volume();
 private:
     int height;
     int width;
     int length;
 };
 Box::Box()    //不带参数的构造函数
 {
  height = 10;
  width  = 10;
  length = 10; 
 }
 在定义对象时:
 Box box1;                     //调用第一个构造函数
 Box box2(15,30,25);           //调用第二个构造函数

5.可以不用参数而调用的构造函数,一个类只能有一个,这样做是为了避免调用时的歧义性。
比如:

Box();
Box(int = 10,int = 10.int = 10);
在建立对象时,如果写成
Box box1;
那么编译系统将无法识别应该调用哪个,出现歧义。

6.在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数;如果构造函数中的参数并非全部为默认值时,就要分析具体情况。

全部为默认参数:

Box(int =10.int = 10, int = 10);  //全部为默认参数
Box();                            //无参的构造函数
Box(int,int);                     //有两个参数的构造函数

若有以下定义语句:

Box box1;                         //歧义,不知道调用1还是2.
Box box2(15,30);                  //歧义,不知道调用1还是3

部分为默认参数:

Box();                           //无参的构造函数
Box(int,int = 10,int = 10);      //有一个参数的构造函数
Box(int,int);                    //有两个参数的构造函数

若有以下定义语句:

Box box1;                        //正确
Box box2(15);                    //调用第二个构造函数
Box box3(15,30);                 //错误,出现歧义。

7.对象数组的构造函数
假设有一个类Student,建立一个对象数组(即数组中的每个元素均是一个对象),然后使用构造函数对其进行初始化。

  • 如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供实参。
Student stud[3] = {60,70,80};
//合法,3个实参分别传递给3个数组元素的构造函数。
  • 但是,如果构造函数有三个参数呢 ?那上面的代码到底是为每个对象各提供第一个实参,还是全部都作为第一个对象的3个实参呢?
    实际上,编译系统是这样处理的:这3个实参分别作为3个元素的第一个实参。

针对有多个参数的构造函数,在进行对象数组的初始化时,正确的做法是:
在花括号中写出构造函数名并在括号内指定实参。

Student stud[3] = {
    Student(1001,18,87),
    Student(1002,19,76),
    Student(1003,18,72)
};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值