添加类的对象数据?

时间:2013-08-15 06:12:46

标签: c++

我正在编写一个程序来添加一个类的2个对象。

//program for adding 2 objects data of same class

#include<iostream>

using namespace std;

class distances
{
private:
    int feet;
    float inches;
public:
    distances()  //constructor
    {
        feet = 0;
        inches = 0.0;
    }

    distances(int f, float i) //constructor
    {
        feet = f;
        inches = i;
    }

    void get_data() //taking value
    {
        cout << "Enter the distance in feet and inches :: " << "\n";
        cin >> feet >> inches;
    }

    void show_data() //showing data
    {
        cout << "The distance in feet is ::" << feet
             << " and in inches is :: " << inches;
    }

    void add(distances d1, distances d2); //adding to objects
};

void distances::add(distances d1, distances d2)
{
    inches = d1.inches + d2.inches;
    feet = 0;

    while(inches >= 12)
    {
        inches = inches - 12;
        ++feet;
    }

    feet += d1.feet + d2.feet;
}

void main()
{
    distances d1, d2, d3;
    d1.get_data();
    d2.get_data();
    d3.add(d1, d2);
    d3.show_data();
    getch();
}

我的程序运行正常,但我的先生说我添加2个对象的方法是错误的,虽然他没有说明原因。他告诉我,当我添加更多对象时,我的方法不起作用。我不知道为什么我的做法是错的。我的朋友告诉我,我的问题可能在 d3.add(d1,d2);

这是真的吗?

我的第二个问题是,当我使用类名,函数名和构造函数名称作为距离而不是距离时,会出现以下错误

1>c:\users\abc\documents\visual studio 2010\projects\pass\pass\pass.cpp(47): error C2872: 'distance' : ambiguous symbol
1>          could be 'c:\users\abc\documents\visual studio 2010\projects\pass\pass\pass.cpp(6) : distance'
1>          or       'c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(899) : iterator_traits<_Iter>::difference_type std::distance(_InIt,_InIt)'

4 个答案:

答案 0 :(得分:3)

您收到错误,因为已经在visual studio的{​​{1}}中定义了名为'distance'的类(不知道这是什么,只是从错误消息中得到了这个) )。

此外,你正在重新发明分部:),而不是你可以做的while循环

xutility

另外,由于你被告知这是错误的方法,我可以在这里看到2条建议。一,由于这仅适用于2个对象,因此可以通过添加循环使其适用于多个对象的添加。不是传递2个对象作为参数,而是传递数组。 其中两个答案指出,重载carry = int(inches / 12); inches = int(inches) % 12; feet += carry; 运算符更直观。

答案 1 :(得分:2)

我认为你的“先生”试图告诉你的是,你的方法跟随下面的事情是不可能的

Distance d1,d2,d3,d4;

d4 = d1 + d2 + d3;

我更喜欢重载“+”运算符而不是定义Add函数。做

d4 = d1 + d2 + d3

非常直观。

关于第二个问题,当您将距离重命名为距离时,它会与STL距离函数冲突。这个函数是unside std namepspace,但是因为你有wirtten

using namespace std

它已经变得可见,因此是冲突的

答案 2 :(得分:1)

0xc0de回答了Visual Studio错误的原因,并提供了一个很好的提示来简化英尺和英寸的计算。

其他人指出的是,你这样做的方式限制你总是在现有距离中准确地添加两个距离。它更清洁,您可以通过在距离等级上提供operator +,operator + =和operator =来无限链接添加。这是扩展类的一种非常常见的方法。确实,您只是添加对象的内部值,但情况往往如此。

答案 3 :(得分:1)

您可以将+运算符重载为:

distances& operator+(const distances& obj1)
{
inches+=(obj1.inches)%12;
feet+=obj1.feet + (obj1.inches)/12;
return *this;
}

返回对this指针的引用的具体用法可能有助于您实现

distances a = b + c + d;