鱼C论坛

 找回密码
 立即注册
查看: 761|回复: 2

[已解决]关于对象数组构造函数的问题.

[复制链接]
发表于 2020-4-13 21:40:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<iostream>
using namespace std;
int howday(int i)
{
        switch(i)
        {
                case 1:i=31;break;
                case 2:i=59;break;
                case 3:i=90;break;
                case 4:i=120;break;
                case 5:i=151;break;
                case 6:i=181;break;
                case 7:i=212;break;
                case 8:i=243;break;
                case 9:i=273;break;
                case 10:i=304;break;
                case 11:i=334;break;
                case 12:i=365;break;
        }
        return i;
}
class Date
{
        public:
                Date(int y,int m,int d):Year(y),Month(m),Day(d){}
                void SetDate();
                void GetDate();
                int DiffDate();
                void AddDate(int num);
        private:
                int Year;
                int Month;
                int Day;
};
void Date::SetDate()
{
        cout<<"请输入年"<<endl;
        cin>>Year;
        cout<<"请输入月"<<endl;
        cin>>Month;
        cout<<"请输入日"<<endl;
        cin>>Day;
       
}
void Date::GetDate()
{
        cout<<Year<<"."<<Month<<"."<<Day<<endl;
}
int Date::DiffDate()
{
        int y=2020;
        int m=4;
        int d=9;
        y=(y-this->Year)*365;
        m=howday(m)-howday(this->Month);
        d=d-this->Day;
        return y+m+d;
}
void Date::AddDate(int num)
{
        this->Day+=num;
        while(this->Day>31)
        {
                Day-=30;
                Month++;
        }
        while(this->Month>12)
        {
                Month-=12;
                Year++;
        }
        cout<<"改变后的日期是: "<<this->Year<<"."<<this->Month<<"."<<this->Day<<endl;
}

int main()
{
        class Date D[3]={Date{2001,2,5},
        Date{2001,6,1},
        Date{2001,5,6}
        };//在这里这样子初始化会有警告。
        class Date *pDate;
        int i=0;
        pDate=D;
        /*for(;i<3;i++)
        {
                D[i].SetDate();
        }*/
        D[1].GetDate();
        (pDate+1)->GetDate();
    i=D[2].DiffDate();
    cout<<"过了"<<i<<"天"<<endl;
    D[0].AddDate(10);
return0;
}//我想问,上面代码应该怎么改才不会警告,就是说怎么给对象数组的每一个成员利用  构造函数  进行初始化(构造函数带多个参数)
最佳答案
2020-4-13 21:55:07
你确定是警告吗?
构造函数还能这样用?Date{2001,2,5}
构造函数也是函数啊,为什么不是小括号,却是大括号?
难道不应该是Date(2001,2,5)吗?
  1. #include<iostream>
  2. using namespace std;
  3. int howday(int i)
  4. {
  5.         switch(i)
  6.         {
  7.                 case 1:i=31;break;
  8.                 case 2:i=59;break;
  9.                 case 3:i=90;break;
  10.                 case 4:i=120;break;
  11.                 case 5:i=151;break;
  12.                 case 6:i=181;break;
  13.                 case 7:i=212;break;
  14.                 case 8:i=243;break;
  15.                 case 9:i=273;break;
  16.                 case 10:i=304;break;
  17.                 case 11:i=334;break;
  18.                 case 12:i=365;break;
  19.         }
  20.         return i;
  21. }
  22. class Date
  23. {
  24.         public:
  25.                 Date(int y,int m,int d):Year(y),Month(m),Day(d){}
  26.                 void SetDate();
  27.                 void GetDate();
  28.                 int DiffDate();
  29.                 void AddDate(int num);
  30.         private:
  31.                 int Year;
  32.                 int Month;
  33.                 int Day;
  34. };
  35. void Date::SetDate()
  36. {
  37.         cout<<"请输入年"<<endl;
  38.         cin>>Year;
  39.         cout<<"请输入月"<<endl;
  40.         cin>>Month;
  41.         cout<<"请输入日"<<endl;
  42.         cin>>Day;
  43.         
  44. }
  45. void Date::GetDate()
  46. {
  47.         cout<<Year<<"."<<Month<<"."<<Day<<endl;
  48. }
  49. int Date::DiffDate()
  50. {
  51.         int y=2020;
  52.         int m=4;
  53.         int d=9;
  54.         y=(y-this->Year)*365;
  55.         m=howday(m)-howday(this->Month);
  56.         d=d-this->Day;
  57.         return y+m+d;
  58. }
  59. void Date::AddDate(int num)
  60. {
  61.         this->Day+=num;
  62.         while(this->Day>31)
  63.         {
  64.                 Day-=30;
  65.                 Month++;
  66.         }
  67.         while(this->Month>12)
  68.         {
  69.                 Month-=12;
  70.                 Year++;
  71.         }
  72.         cout<<"改变后的日期是: "<<this->Year<<"."<<this->Month<<"."<<this->Day<<endl;
  73. }

  74. int main()
  75. {
  76.         class Date D[3]={Date(2001,2,5),
  77.         Date(2001,6,1),
  78.         Date(2001,5,6)
  79.         };//构造函数也是函数啊,为什么不是小括号,却是大括号?
  80.         class Date *pDate;
  81.         int i=0;
  82.         pDate=D;
  83.         /*for(;i<3;i++)
  84.         {
  85.                 D[i].SetDate();
  86.         }*/
  87.         D[1].GetDate();
  88.         (pDate+1)->GetDate();
  89.     i=D[2].DiffDate();
  90.     cout<<"过了"<<i<<"天"<<endl;
  91.     D[0].AddDate(10);
  92. return 0;
  93. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-13 21:55:07 | 显示全部楼层    本楼为最佳答案   
你确定是警告吗?
构造函数还能这样用?Date{2001,2,5}
构造函数也是函数啊,为什么不是小括号,却是大括号?
难道不应该是Date(2001,2,5)吗?
  1. #include<iostream>
  2. using namespace std;
  3. int howday(int i)
  4. {
  5.         switch(i)
  6.         {
  7.                 case 1:i=31;break;
  8.                 case 2:i=59;break;
  9.                 case 3:i=90;break;
  10.                 case 4:i=120;break;
  11.                 case 5:i=151;break;
  12.                 case 6:i=181;break;
  13.                 case 7:i=212;break;
  14.                 case 8:i=243;break;
  15.                 case 9:i=273;break;
  16.                 case 10:i=304;break;
  17.                 case 11:i=334;break;
  18.                 case 12:i=365;break;
  19.         }
  20.         return i;
  21. }
  22. class Date
  23. {
  24.         public:
  25.                 Date(int y,int m,int d):Year(y),Month(m),Day(d){}
  26.                 void SetDate();
  27.                 void GetDate();
  28.                 int DiffDate();
  29.                 void AddDate(int num);
  30.         private:
  31.                 int Year;
  32.                 int Month;
  33.                 int Day;
  34. };
  35. void Date::SetDate()
  36. {
  37.         cout<<"请输入年"<<endl;
  38.         cin>>Year;
  39.         cout<<"请输入月"<<endl;
  40.         cin>>Month;
  41.         cout<<"请输入日"<<endl;
  42.         cin>>Day;
  43.         
  44. }
  45. void Date::GetDate()
  46. {
  47.         cout<<Year<<"."<<Month<<"."<<Day<<endl;
  48. }
  49. int Date::DiffDate()
  50. {
  51.         int y=2020;
  52.         int m=4;
  53.         int d=9;
  54.         y=(y-this->Year)*365;
  55.         m=howday(m)-howday(this->Month);
  56.         d=d-this->Day;
  57.         return y+m+d;
  58. }
  59. void Date::AddDate(int num)
  60. {
  61.         this->Day+=num;
  62.         while(this->Day>31)
  63.         {
  64.                 Day-=30;
  65.                 Month++;
  66.         }
  67.         while(this->Month>12)
  68.         {
  69.                 Month-=12;
  70.                 Year++;
  71.         }
  72.         cout<<"改变后的日期是: "<<this->Year<<"."<<this->Month<<"."<<this->Day<<endl;
  73. }

  74. int main()
  75. {
  76.         class Date D[3]={Date(2001,2,5),
  77.         Date(2001,6,1),
  78.         Date(2001,5,6)
  79.         };//构造函数也是函数啊,为什么不是小括号,却是大括号?
  80.         class Date *pDate;
  81.         int i=0;
  82.         pDate=D;
  83.         /*for(;i<3;i++)
  84.         {
  85.                 D[i].SetDate();
  86.         }*/
  87.         D[1].GetDate();
  88.         (pDate+1)->GetDate();
  89.     i=D[2].DiffDate();
  90.     cout<<"过了"<<i<<"天"<<endl;
  91.     D[0].AddDate(10);
  92. return 0;
  93. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-13 22:14:49 | 显示全部楼层
sunrise085 发表于 2020-4-13 21:55
你确定是警告吗?
构造函数还能这样用?Date{2001,2,5}
构造函数也是函数啊,为什么不是小括号,却是大括 ...

唉,确实是警告,按你这个改一下确实可以了,糊涂了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-16 10:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表