Part-Three 类与对象

1.时钟类的完整程序

#include<iostream>
using namespace std;
class Clock{
    public :
        void setTime(int newH=0,int newM=0,int newS=0);//设置函数的默认值,注意!在此处声明时设定后外部实现时就不用设置了 
        void showTime();
    private:
        int hour,minute,second;
};

//时钟类的具体实现
void Clock::setTime(int newH,int newM,int newS)
{
    hour=newH;
    minute=newM;
    second=newS;
 } 
 
 void Clock::showTime()
 {
     cout<<hour<<":"<<minute<<":"<<second<<endl;
 }

//主函数 
int main()
{
    Clock myClock;//定义对象
    cout<<"First time set and output:"<<endl;
    myClock.setTime();//设置时间为默认时间
    myClock.showTime();
    cout<<"Second time set and output:"<<endl;
    myClock.setTime(8,30,30);
    myClock.showTime(); 
     
    return 0;
 } 

Part-Three 类与对象

2.真是……本来想给clock类加上构造函数和复制构造函数还有析构函数,结果,在构造函数这块出了问题,call of overloaded Clock is ambigious,说是Clock这个函数有二义性,导致无法重载

下面看代码:

#include<iostream>
using namespace std;
class Clock{
    public :
        void setTime(int newH=0,int newM=0,int newS=0);//设置函数的默认值,注意!在此处声明时设定后外部实现时就不用设置了 
        void showTime();
        Clock(int newH=0,int newM=0,int newS=0);//含参构造函数
        Clock(); //无参构造函数 
        Clock(Clock& clockCopy);//复制构造函数
        ~Clock(){}//内置的析构函数 
    private:
        int hour,minute,second;
};

//时钟类的具体实现
Clock::Clock(int newH,int newM,int newS)
{
    hour=newH;
    minute=newM;
    second=newS;
 } 
 
Clock::Clock()
{
    hour=0;
    minute=0;
    second=0;
 } 
 
Clock::Clock(Clock& clockCopy)//复制构造函数是把传过来的对象的属性赋值给当前对象 
{
    hour=clockCopy.hour;
    minute=clockCopy.minute;
    second=clockCopy.second; 
 } 
void Clock::setTime(int newH,int newM,int newS)
{
    hour=newH;
    minute=newM;
    second=newS;
 } 
 
 void Clock::showTime()
 {
     cout<<hour<<":"<<minute<<":"<<second<<endl;
 }

//主函数 
int main()
{
    
    Clock myClock;//定义对象
    cout<<"First time set and output:"<<endl;
    myClock.setTime();//设置时间为默认时间
    myClock.showTime();
    cout<<"Second time set and output:"<<endl;
    myClock.setTime(8,30,30);
    myClock.showTime(); 
     
    return 0;
 } 

Part-Three 类与对象

主要是这块:

Part-Three 类与对象

当我把含参构造函数的参数都设置上默认值的时候,系统就会允许在调用这个函数时可以不加参数,这就跟无参构造函数冲突了

想要避免这种情况的话,可以把默认值含参构造函数的默认值去掉,改成Clock(int newH,int newM,int newS); 的形式

如果就是非得想给它设一个默认值且不想跟无参构造函数冲突的话,我个人给你出个法子,你可以加一个没用的变量,当然,你要保证这个没用的变量不会跟其他单参数构造哈三年冲突;Clock(int nouse,int newH=0,int newM=0,int newS=0);//虽然传进去一个变量,但是你函数实现时不用它就行了;    当然这只是针对某些情况下这样去做,一般没必要,值不当

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.