繁体   English   中英

对象通过时重置

[英]Object resets when passed

我最近一直在练习 C++,并且遇到了这个练习,我在对象引用方面遇到了一些困难。

时钟UTC.h

#include "ClockUTC.h"

ClockUTC::ClockUTC()
{
    hour = 0;
    minute = 0;
}

ClockUTC::ClockUTC(int hour, int minute)
{
    this-> hour = hour;
    this-> minute = minute;
}

int ClockUTC::getHour()
{
    return hour;
}

int ClockUTC::getMinute()
{
    return minute;
}

void ClockUTC::setHour(int hour)
{
    this->hour = hour;
}

void ClockUTC::setMinute(int minute)
{
    this->minute = minute;
}

时钟UTC.cpp

#ifndef CLOCKUTC_H_INCLUDED
#define CLOCKUTC_H_INCLUDED


#include <iostream>


using namespace std;



class ClockUTC {

private:
int hour;
int minute;

public:
    ClockUTC();
    ClockUTC(int hour, int minute);
    int getHour();
    int getMinute();
    void setHour(int hour);
    void setMinute(int minute);
};


#endif // CLOCKUTC_H_INCLUDED

时钟TZ.h

#ifndef CLOCKTZ_H_INCLUDED
#define CLOCKTZ_H_INCLUDED



#include <iostream>
#include "ClockUTC.h"


using namespace std;



class ClockTZ : public ClockUTC{

private:
ClockUTC clockUTC;
int offset;

public:
    ClockTZ(ClockUTC clockUTC, int offset);
    ClockUTC getClockUTC();
    int getOffset();
    void setClockUTC(ClockUTC clockUTC);
    void setOffset(int offset);
};




#endif // CLOCKTZ_H_INCLUDED

时钟UTC.cpp

#include "ClockTZ.h"


 ClockTZ::ClockTZ(ClockUTC clockUTC, int offset)
{
    this->clockUTC = clockUTC;
    this->offset = offset;
    clockUTC.setHour(clockUTC.getHour() + offset);
}


ClockUTC ClockTZ::getClockUTC()
{
    return clockUTC;
}


int ClockTZ::getOffset()
{
    return offset;
}


void ClockTZ::setClockUTC(ClockUTC clockUTC)
{
    this->clockUTC = clockUTC;
}



void ClockTZ::setOffset(int offset)
{
    this->offset = offset;
}

这里的主文件是:

/**
   Unit tests for 2nd EOOP assignment.

   ClockUTC - aggregate 2 integers (hour, minute)
   ClockTZ - view for ClockUTC, store reference to clockUTZ and offset

   Note that this is in a big part "code reading" exercise.
   Based on this file you should implement two classes mentioned above,
   with proper interface, and in right header file.
 */

    #include "ClockTZ.h"
    #include <iostream>
    
    using namespace std;
    
    int main() {
    
        ClockUTC greenwich(9,17);
        ClockTZ warsaw(greenwich, 2);
    
        if (warsaw.getHour() != 12){
            cout << "Error in getHour() 1" <<  endl;
        }
    
        return 0;
    }

我已经对上述文件进行了编码,唯一的问题是在创建 ClockUTC 类并将其传递给 ClockTZ 之后,ClockUTC 重置并且它正在调用它的空构造函数并将小时设置为 0 而不是它的值 + 预期的偏移量。 我知道这是因为该对象没有任何引用,并且它在传递或某事后立即被销毁,但似乎无法修复它。

当前输出:0

预期输出:12

我尝试通过应用 & 参考来修复它,但似乎没有任何效果。 有人可以帮我正确应用它吗?

ClockTZ有两个ClockUTC对象:一个基类和一个名为clockUTC成员变量 ClockTZ构造函数将通过复制传入的值来初始化成员变量,并将默认初始化基类。 当您稍后调用getHour ,将调用基类,返回默认值0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM