c++ - 运算符 << 和 >> 重载

标签 c++ overloading operator-keyword

<分区>

Possible Duplicate:
Operator overloading

“你需要实现一个名为 Duration 的类,它表示长度为 时间,以小时、分钟和秒表示,例如轨道上的长度 CD,或跑马拉松所需的时间。该类应该有一组适当的 构造函数(包括错误检查)和访问器方法。 build 者之一 应该允许使用单个整数初始化 Duration 对象,表示 以秒为单位的持续时间。 应该重载 << 和 >> 运算符以允许 通过流输入和输出 Duration 对象。 应输出 Duration 对象 格式为\h:mm:ss",例如\1:39:33"、\0:09:07"和\1:00:08"。还有 应该重载加法运算符 +,以便可以添加两个 Duration 对象 一起产生一个新的 Duration 对象,这样一个整数秒 可以添加到 Duration 对象。最后,类应该定义类型转换 从 Duration 对象到表示以秒为单位的持续时间的整数。”

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    using std::cout;
    using std::cin;
    using std::ostream;
    using std::istream;

    class Duration 
    {
        private:
        int hours, minutes, seconds;
        int theSeconds;

        public:
        Duration() //default constructor.
        {}

        Duration(int hr, int min, int sec) //ordinary constructor.
        {
            hours = hr;
            minutes = min;
            seconds = sec;
        }

        inline int getHours()
        {
            return hours;
        }

        inline int getMinutes()
        {
            return minutes;
        }

        inline int getSeconds()
        {
            return seconds;
        }
    };

希望到目前为止我已经朝着正确的方向完成了这项任务(本周新的 c++)。然而,我正在为如何实现我以粗体突出显示的部分以及之后的所有内容而苦苦挣扎......

请指教和帮助我。 另请注意,这不是类(class)作业等。我只是想为明年的 C++ 做好准备。谢谢。

最佳答案

你应该有一个像这样实现的 std::ostream &-returning 函数:

class Duration {

    int hours, minutes, seconds;
    int theSeconds;

    public:

        friend std::ostream & operator << (std::ostream & os, const Duration & dObj) {

            os << "The hours are " << dObj.hours << '\n';
            os << "The minutes are " << dObj.minutes << '\n';

            // ... and so on

        }

        Duration() {}
        Duration(int hr, int min, int sec) {
            hours = hr;
            minutes = min;
            seconds = sec;
    }

};

你也可以用同样的方式定义operator>>:

friend std::istream & operator >> ( std::ostream & os, const Duration dObj ) {

    os >> dObj.minutes >> dObj.hours /* >> ... */;

    return os;

}

所以你可以这样使用它:

Duration d;

std::cin >> d;

std::cout << d;

关于c++ - 运算符 << 和 >> 重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13182967/

相关文章:

C++内部静态声明和动态声明有什么区别

c++ - 比较同一类的 2 个对象(覆盖 == 运算符)c++

java - 如何使用java使jasper报表中的数据像列表一样显示?

c++ - 无法结合模板和类函数重载

c++ - 如何结合就地转换和复制转换?

php - 字符串在膨胀后包含许多 '\0'

c++ - 从 C0X32.OBJ 引用的未解析的外部 '_main'

c++ - 快速排序不适用于排序数组

java - 发送 ("test", 1.0d) 会产生 Java 8 编译错误、不明确的方法调用 xMethod(String,double...) 与 xMethod(String,Object...)

objective-c - Objective C 中的多态方法