指针对象

时间:2018-05-02 17:06:13

标签: c++ pointers operator-overloading

我正在努力将我的对象与另一个相同类型的对象进行比较。

Entry<string, string>* name =  new Entry<string, string>(names[9], paths[9]);
Entry<string, string>* name2 = new Entry<string, string>(names[9], paths[9]);

bool isSame = name == name2;

这总是错误的。

在我的实施中,我尝试过一些事情,但没有运气。

template<class KeyType, class ItemType>
bool Entry<KeyType, ItemType>::operator==(Entry<KeyType, ItemType>* rightHandItem)
{
    KeyType key = rightHandItem->getKey();
    return (searchKey == key);
}

template<class KeyType, class ItemType>
bool Entry<KeyType, ItemType>::operator>(Entry<KeyType, ItemType>* rightHandItem)
{
    KeyType key = rightHandItem->getKey();
    return (searchKey > key);
}
template<class KeyType, class ItemType>
bool Entry<KeyType, ItemType>::operator<(Entry<KeyType, ItemType>* rightHandItem)
{
    KeyType key = rightHandItem->getKey();
    return (searchKey < key);
}

这是我的类头文件

#pragma once
template<class KeyType, class ItemType>
class Entry
{
public:
    Entry();
    Entry(KeyType& searchKey);
    Entry(KeyType& searchKey, ItemType newEntry);
    ~Entry();
    ItemType getItem() const;
    KeyType getKey() const;
    void setItem(const ItemType& newEntry);
    bool operator==(const Entry<KeyType, ItemType>& rightHandItem) const;
    bool operator>(const Entry<KeyType, ItemType>& rightHandItem) const;
    bool operator<(const Entry<KeyType, ItemType>& rightHandItem) const;

    bool operator==(Entry<KeyType, ItemType>* rightHandItem);
    bool operator>(Entry<KeyType, ItemType>* rightHandItem);
    bool operator<(Entry<KeyType, ItemType>* rightHandItem);
private:
    ItemType Item;
    KeyType searchKey;
protected:
    void setKey(const KeyType& searchKey);
};

#include "Entry.cpp"

我能让它工作的唯一方法是将条目声明为对象而不是指针。

我认为这个问题是一个快速搜索,但我一直无法找到重复。如果以前曾经问过,请告诉我。

我如何比较两个指针?

1 个答案:

答案 0 :(得分:0)

Entry<string, string>* name =  new Entry<string, string>(names[9], paths[9]);
Entry<string, string>* name2 = new Entry<string, string>(names[9], paths[9]);

bool isSame = name == name2;
     

这总是错误的。

总是false,因为您正在比较两个不同对象的地址。实际上一般情况下除非你对它进行修改,否则你无法用指针做什么。如果你想调用Entry::operator==,你需要取消引用指针,如:

bool isSame = *name == *name2;
是的,问题出现了,为什么你首先使用指针?只需使用普通对象就可以解决问题:

 auto name =  Entry<string, string>(names[9], paths[9]);
 auto name2 = Entry<string, string>(names[9], paths[9]);

 bool isSame = name == name2;

如果您提供Entry::operator==(Entry)

,这将按预期工作