定义运算符<<内部课程

时间:2011-03-03 03:13:27

标签: c++ oop class operator-overloading friend-function

请考虑以下代码:

class MyClass
{
    template <typename Datatype>
    friend MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData);
    // ...
};

template <typename Datatype>
MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData)
{
    // ...
}

如何在类中定义operator<< 而不是朋友函数?像这样:

class MyClass
{
    // ...

    public:

    template <typename Datatype>
    MyCLass& operator<<(MyClass& MyClassReference, Datatype SomeData)
    {
        // ...
    }
};

上面的代码产生编译错误,因为它接受两个参数。删除MyClassReference参数可以修复错误,但我的代码依赖于该参数。 MyClassReference只相当于*this吗?

3 个答案:

答案 0 :(得分:1)

你有

template <typename Datatype> MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData);

在课堂内。它是类MyClass的一种方法。非静态方法有一个名为this指针的隐式参数。 this指针是指向调用该方法的对象的指针。您不需要MyClassReference参数,因为this指针符合此目的。

将该方法声明更改为

template <typename Datatype> MyClass& operator<<(Datatype SomeData);

答案 1 :(得分:1)

我不确定这是个好主意,但是 - 当您将operator<<定义为成员函数时,*this基本上等同于您在运算符中定义的第一个参数。

答案 2 :(得分:0)

你快到了那里:

class MyClass
{
    template <typename Datatype>
    friend MyClass& operator<<(MyClass& MyClassReference, Datatype SomeData) 
    {
        // ...
    }
};