• 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;
     } 

    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;
     } 

    主要是这块:

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

    想要避免这种情况的话,可以把默认值含参构造函数的默认值去掉,改成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.

    作者:Glacier

    -------------------------------------------

    个性签名:向上吧少年,加油!

    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,感谢!

  • 相关阅读:
    ARP病毒的分析与防治思路
    sqlserver存储过程参数拼接
    自定义函数
    asp.net 文件流操作
    asp.net 国际化
    一个用户登录权限的基本例子
    更新密码,判断旧密码存储过程
    SQLSerVer计算1100之间所有能被3整除的数的个数及总和
    等待2小时2分零10秒后才执行sql语句
    C#实现按日期命名上传文件代码
  • 原文地址:https://www.cnblogs.com/wildness-priest/p/10714330.html
Copyright © 2020-2023  润新知