繁体   English   中英

运算符重载指向struct的指针

[英]operator overloading for pointer to struct

我正在尝试比较一个类中结构“Node”的两个指针的值。 虽然我重载了<运算符,但我不确定这是否是正确的方法,因为当我运行代码时,我得到正确的答案,有时它会将它们比较错误。 这样可以比较值属性吗? (我必须使用Node指针,我不能用其他方式)。 为什么每次运行程序时结果都不同? 谢谢你的帮助!

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

struct Node {
    int value;
    bool operator >(const Node &n) { return value > n.value ; };
    bool operator <(const Node &n) { return value < n.value; };

};

int main()
{
    Node *a;
    a = new Node;
    a->value = 1;
    test<Node *> t;
    t.compare(a);
    delete a;
    return 0;
}

这是compare.h文件:

template<class TYPE>
class test {
public:
    void compare(const TYPE n);
    test();
    ~test();
private:
    TYPE n;
};

template<class TYPE>
inline void test<TYPE>::compare(const TYPE a)
{
        if (n > a)
            std::cout << "n > a";
        else if (a>n)
            std::cout << "n < a";

}

template<class TYPE>
inline test<TYPE>::test()
{
    n = new Node;
    n->value = 2;
}

template<class TYPE>
inline test<TYPE>::~test()
{
    delete n;
}

在这里,您使用模板参数Node*实例化test

test<Node *> t;

test::compare函数中,您将与模板参数进行比较

template<class TYPE>
inline void test<TYPE>::compare(const TYPE a)
{
        if (n > a)
            std::cout << "n > a";
        else if (a>n)
            std::cout << "n < a";
}

如果您将TYPE替换为您使用的参数Node* ,您将获得以下内容:

inline void test::compare(const Node* a)
{
        if (n > a)
            std::cout << "n > a";
        else if (a>n)
            std::cout << "n < a";
}

因此,您可以看到您正在比较Node*值。 这意味着你要比较na内存地址

您可以通过首先取消引用指针来解决此问题

template<class TYPE>
inline void test<TYPE>::compare(const TYPE a)
{
        if (*n > *a)
            std::cout << "n > a";
        else if (*a > *n)
            std::cout << "n < a";
}

暂无
暂无

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

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