C++中关于默认构造函数和默认参数…

# include<iostream>
using namespace std;
class Time
{
public:                            //公用成员函数
 Time()                                  //默认构造函数
 {
  hour=13;
  minute=25;
  sec=46;
 }
 Time(int s,int h=10,int m=52)
 {
  hour=h;
  minute=m;
  sec=s;
 }
// Time(int h,int m,int s):hour(h),minute(m),sec(s){};//重载构造函数,运行时会根据形参的不同,自动匹配调用(类的初始化数据成员的另一种方法:参数初始化列表)
 void set_time();
 void show_time();                       //私有成员数据
private:
 int hour;
 int minute;
 int sec;
};

void Time::set_time()
{
 cin>>hour;
 cin>>minute;
 cin>>sec;
}
void Time::show_time()
{
 cout<<hour<<":";
 cout<<minute<<":";
 cout<<sec<<endl;
}
int main()
{
 Time t1(12,13,16);
 t1.show_time();
 t1.set_time();
 t1.show_time();
 Time t2;
 t2.show_time();
 Time t3(23);
    t3.show_time();
 Time t4(23,15);
    t4.show_time();
 return 0;
}


在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。例:
Box(int =10,int =10,int =10);        1
Box();                               2
Box(int,int);                        3

若有以下定义语句:
Box box1;                 //是调用上面的第一个默认参数的构造函数,还是第二个默认构造函数
Box box2(15,30);          //是调用上面的第一个默认参数的构造函数,还是第三个构造函数

 

所谓默认构造函数,就是调用构造函数时,不必给出实参的构造函数。

第2个构造函数是最基本,最原始的构造函数;第1个就是形参都已默认,指定了的构造函数,调用时实参可以传过去1个,2个,3个,甚至0个数据。

比如,第一个语句:Box box1;我们可以认为他是直接调用第2个构造函数,也可以认为他是调用了第1个构造函数,只不过没有实参传递过去而已,这样就产生了歧义。

同理,第二个语句,我们可以理解为它调用了第3 个构造函数。但同时,理解为它调用第1个构造函数,只不过仅传过去2个实参,也是可是说得通的。这也就产生了歧义。

事实上,上面3个函数中任意一个都可以说是另两个的重载函数,那么“在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数”就很好容易理解了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值