0

H,这是我给出错误对象的代码未声明首先使用此函数虽然一切都很好,为什么会这样?该类对 main 函数及其给出的错误不可见。

 #include <iostream.h>
 #include <stdio.h>
 #include <conio.h>
 using namespace std;
 class time
 {
  int min;
  int sec;
  int hour;

  public:
         time()
         {
               cout << "uninitialized constructor " << endl << endl;
               min = 0;
               sec = 0 ;
               hour = 0;
         }
         time(int m, int s, int h)
         {
                  min= m;
                  sec = s;
                  hour = h;
         }
         void display()
         {
              cout << min << ":" << sec <<":" << hour ;
         }
         void add(time t1, time t2)
         {
              int sece = t1.sec+t2.sec;
              int mint = t1.min + t2.min;
              int hours = t1.hour + t2.hour;

              time t4(sece , mint, hours);

         }
 };

 int main(void)
 {
  time t1(23, 45,11);
  time t2(11,59,59);
  time t3;
  t3.add(t1,t2);
  t3.display();
  getch();
 }

其次,这段代码行是什么意思?

time(int h,int m,int s):hrs(h),mins(m),secs(s){}

可以用这个代替: time(int m, int s, int h) { min= m; 秒 = 秒;小时 = h; }

4

4 回答 4

2

显示确切的错误。

time(int h,int m,int s):hrs(h),mins(m),secs(s){}

那是一个初始化列表

// could it be replaced by this:
time(int m, int s, int h) { min= m; sec = s; hour = h; } 

不,因为您更改了参数顺序。

但是time(int h,int m,int s):hrs(h),mins(m),secs(s){}类似于

time(int h, int m, int s) { hour = h; min = m; secs = s; }
于 2013-09-14T20:20:27.587 回答
1

您选择的类名有点不幸,因为std::time标准库中已经有一个函数命名,所以只需选择不同的名称或考虑使用命名空间。

关于第二个问题:

这种初始化成员变量的方式称为初始化列表,是首选的使用方式。特别是在处理对象而不是原始数据类型时,只有初始化列表才能确保对象的构造函数只被调用一次。否则,默认构造函数将被隐式调用,只是为了让您在构造函数体内再次初始化对象。

于 2013-09-14T20:29:29.873 回答
0

至于你的第二个问题——

time(int h,int m,int s):hrs(h),mins(m),secs(s){}

此行使用MIL -成员初始化列表,至于使用/不使用 -为什么我更喜欢使用成员初始化列表?

通过一些小的修改,您可以开始使用它。

请提供第一个问题的编译错误,没有看到错误,我可以看到构建可能失败的一个主要原因。该语言已经定义了一个名为 的类型time,因此您可能需要更改名称。

于 2013-09-14T20:21:00.157 回答
0

如果您希望 t3 真正具有 t1,t2 的总和,您的代码将不会打印正确的输出。如果代码实际上是所需的,那很好。

但是,如果 add 确实需要添加,则不要在函数中创建另一个局部变量 t4。而是像这样修改成员变量:

 void add(Time t1, Time t2)
 {
     sec = t1.sec+t2.sec;
     min = t1.min + t2.min;
     hour = t1.hour + t2.hour;
     min+=sec/60; sec%=60;
     hour+=min/60; min%=60;
 }
于 2013-09-14T20:54:18.293 回答