操作超载两个对象?

时间:2015-02-03 08:33:41

标签: c++ file-io comparison

我正在尝试读取包含重量和高度的两个文本文件,然后将它们存储到矢量中。之后,我想检查它们是否相等。例如,如果一个文本具有90个权重,10个高度,另一个文本文件具有50个权重和12个高度。我该怎么做?感谢

  #include <iostream>
        #include <vector>
        #include <cstdlib>
        #include <fstream>
        #include <string>
        using namespace std;
        class Person{

            public:
                Person();
                Person(int weight, int height);

            bool operator ==(const Person& e);

            private:
                int weight;
                int height;
        };

        void readFile(string file, std::vector<Person>&p);

        int main(){
            std::vector<Person>p;
            std::vector<Person>e;

            readFile("person1.txt", p);
            readFile("person2.txt", e);

            (p==e);
            return 0;
        }

        Person::Person(int weight, int height){
            weight = weight;
            height = height;
        };

        bool Person::operator ==(const Person& e)
        {
            return ((weight== e.weight)
                    && (height== e.height));
        }

        void readFile(string file, std::vector<Person>&p){
            int height1;
            int weight1;
            ifstream inFile;
            inFile.open(file.c_str());
            if(inFile.fail()){
                cerr << "Error opening file.";
                exit(1);
            }
            while(!inFile.eof()){
                inFile >> height1 >> weight1;
                p.push_back(Person(height1, weight1));
            }
            inFile.close();
        }

2 个答案:

答案 0 :(得分:0)

  1. 您想检查两个文件中的所有元组是否相等吗?

  2. 您想查看每个文件中的至少1个元组匹配吗?

  3. 对于案例1,只需遍历两个向量,看看两个向量中的每个对象是否相同(你已经有了#39; ==&#39;重载)。

    对于案例2,从vector1中选择一个并从vector2中检查所有,并对所有vector1对象重复。

    此外,readFile 应该是班级Person的成员函数。使它成为一个独立的功能。

    注意:在main中声明向量并将其传递给readFile,然后相应地检查相等性。

    修改 ==运算符重载应该是

    bool operator==(const Person&) const ; // since it does not mutate the object
    bool Person::operator==(const Person& p) const
    { ... }
    

答案 1 :(得分:0)

OT,但是你的构造函数不起作用,因为你只是访问参数weightheight并且不分配成员

Person::Person(int weight, int height){
    weight = weight;
    height = height;
};

您可以重命名参数,例如如果您想保留名称,请wh或前缀this->

Person::Person(int weight, int height){
    this->weight = weight;
    this->height = height;
};

另一种方法是使用成员初始化

Person::Person(int weight, int height)
    : weight(weight), height(height)
{
};

对于您的问题,由于您无法知道哪个值是权重,哪个值是高度,因此您只能看到其中有多少个值,并比较两个文件中是否存在相同数量的整数。