在C 中,我如何在下面的示例中成功将类别链接在一起

In c++ how do I successfully chain classes together in the following example?

本文关键字:成功 在一起 链接 在下面      更新时间:2023-10-16

在C 中如何在以下示例中成功将类链接在一起?

Clock timer;
std::cout << timer.getElapsedTime().inSeconds();
std::cout << timer.getElapsedTime().inMilliseconds();

如何成功编写代码?

class ElapsedTime
{
private:
    double _start;
public :
    ElapsedTime(double start)
    {
        _start = start;
    }
    double inSeconds() const
    {
        return (std::clock() - _start ) / (double) CLOCKS_PER_SEC;
    }
    double inMilliseconds() const
    {
        return ((std::clock() - _start ) / (double) CLOCKS_PER_SEC) * 1000;
    }
};

class Clock
{
private:
    std::clock_t _start;
    double _duration;
public:
    Clock()
    {
        _start = std::clock();
    }
    ElapsedTime getElapsedTime() const {
        return ElapsedTime(_start);
    }
    double reset()
    {
        _duration = (std::clock() - _start ) / (double) CLOCKS_PER_SEC;
        _start = std::clock();
        return _duration;
    }
};

编辑:通过PM100进行建议的更改

尽管类链仍然返回一个类似.7E-05

的值

,如果我尝试以以下方式使用const,我会得到一个分割故障

ElapsedTime const& getElapsedTime() const {
        return ElapsedTime(_start);

如果要以这种方式使它起作用,这很奇怪。您需要一个用于start

的ELAPSEDTIME的构造函数
class ElapsedTime
{
     double _start;
  public :
     ElapsedTime(double start)
     { 
        _start = start;
    }

(在代码的其余部分中使用_start)

然后在时钟

   ElapsedTime getElapsedTime() const {
        return ElapsedTime(start);
    }

您的变量" start"在类时钟的范围内声明。它在您的类大量范围内未定义。

为什么不定义时钟类中的方法弹出时间,而不是使用2个类?

如果我正在编写此代码,我可能不会使ElapsedTime自己的类。我想我只会在Clock类中添加getElapsedTimeInSeconds()getElapsedTimeInMilliseconds(),就像:

class Clock
{
public:
    Clock()
    {
        start = std::clock();
    }
    double getElapsedTimeInSeconds() const
    {
        return (std::clock() - start) / (double) CLOCKS_PER_SEC;
    }
    double getElapsedTimeInMilliseconds() const
    {
        return getElapsedTimeInSeconds() * 1000;
    }
    double reset()
    {
        duration = (std::clock() - start) / (double) CLOCKS_PER_SEC;
        start = std::clock();
        return duration;
    }
protected:
    std::clock_t start;
private:
    double duration;
};

,然后是主要功能:

int main(void)
{
    Clock timer;
    std::cout << timer.getElapsedTimeInSeconds() << std::endl;
    std::cout << timer.getElapsedTimeInMilliseconds() << std::endl;
}