【问题标题】:C++ Program, Object VariablesC++ 程序,对象变量
【发布时间】:2012-03-11 11:30:02
【问题描述】:

所以对于作业,我必须创建这个程序,它从文本文件中读取,放入对象数组,使用冒泡排序对数组进行排序。冒泡排序必须使用 PhoneEntry 中的 alphaGreat() 函数。我做得很好。当我需要将 lastName 与传递的对象姓氏进行比较时,问题出现在我的 alphaGreat 函数中。我该怎么做呢?到目前为止,这对我来说是一个艰难的计划......

驱动程序

#include <iostream>
#include <fstream>
#include <string>
#include "phoneEntry.h"
using namespace std;

void mySort(double array[], int size)
{
    double temp;
    bool inOrder = false;
    for (int i = size - 1; i > 0 && !inOrder; i--)
    {
        inOrder = true;
        for (int j = 0; j < i; j++)
        {
            if (array[j] > array[j + 1])
            {
                inOrder = false;
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
};

int main()
{   
    const int MAXNUM = 500;
    PhoneEntry entry[MAXNUM];
    ifstream filezilla;
    filezilla.open("phone.txt");
    int count = 0;

    if(filezilla)
    {
        while(count < MAXNUM && entry[count].readEntry(filezilla))
        {
            count++;
        }
        mySort(entry, count);
        for(int i = 0; i < count; i++)
        {
            entry[i].writeEntry(cout) << endl;
        }
    }
    else
    {
        cout << "Four Oh Four - File Not Found" << endl;
    }

    return 0;
}

电话输入

#include <iostream>
#include <fstream>
#include <string>
#include "phoneNumber.h"
using namespace std;

class PhoneEntry
{
    private: 
        PhoneNumber phone;
        string firstName,
               lastName;
        void _writeDots(ostream& fout, int n) const;
        bool alphaGreater(const PhoneEntry&) const;
    public:
        istream& readEntry(istream&);
        ostream& writeEntry(ostream&) const;

};

istream& PhoneEntry::readEntry(istream& Sin)                    
{
    Sin >> firstName >> lastName;
    phone.readNumber(Sin);

    return Sin;
};
///////////////////////////////////////////
ostream& PhoneEntry::writeEntry(ostream& Sout) const            
{   
    const int num = 28;

    Sout << firstName << ", " << lastName;
    int fill = num - (firstName.length() + lastName.length());
    _writeDots(Sout, fill);

    phone.writeNumber(Sout);

    return Sout;
};
///////////////////////////////////////////
void PhoneEntry::_writeDots(ostream& fout, int n) const
{
    if(n % 2)
        fout << " .";
    else
        fout << ".";


    for(int i = 0; i < n/2; i++)
    {
        fout << " .";
    }
};

bool PhoneEntry::alphaGreater(const PhoneEntry& item) const
{
    bool alpha = false;
    // I have first and last names reversed in my entire program
    if(item.compare(firstName) == 0)
    {
        if(item < lastName)
        {
            alpha = true;
        }
        else 
        {
            alpha = false;
        }
    }
    else if(item < firstName)
    {
        alpha = true;
    }
    else
    {
        alpha = false;
    }

    return alpha;
}

电话号码

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class PhoneNumber
{
    private: 
        int areaCode, 
            prefix, 
            suffix;
    public: 
        istream& readNumber(istream&);
        ostream& writeNumber(ostream&) const;
};

istream& PhoneNumber::readNumber(istream& Sin)                  
{
    Sin >> areaCode >> prefix >> suffix;
    return Sin;
};
///////////////////////////////////////////
ostream& PhoneNumber::writeNumber(ostream& Sout) const          
{
    Sout << areaCode << "-" << prefix << "-" << suffix;
    return Sout;
};

文本文件

Fleischman Robert 336 746 5525
Rorie Tim 336 746 6915
Johnson Gary 336 746 6985
Hoyt James 336 781 2668
Krass Mike 606 393 5355
Rust James 606 393 5525
Sekutera Norman 606 746 3635
Kennedy Amy 606 746 3985
Behrends Leonard 606 746 4235
Rueter Clarence 606 746 4395
Rorie Lonnie 606 746 4525
Beck Keith 606 746 4655
Bornemeier Eugenia 606 746 4775
Fleischman Arlo 606 746 4915
Rorie Scott 606 746 4985
Elliott Alice 712 746 2166
Keller Thomas 712 746 2196
Halvorsen Lorenz 712 746 2211
Slominski Greg 712 872 2006
Blunt Ed 712 872 2041
Bailei David 712 872 2051
Krouse John 712 872 2063
Furgerson Glen 712 872 2064
Behii Michelle 712 872 2123
Harris Mark 712 872 2124
Ropers Lorens 712 872 2164
Krejdl Wayne 804 274 2695
Kitchen Pat 804 274 2805
Jones Terry 804 274 2865
Schulz Harvey 804 274 3145
Griffith Joe 804 274 3165
Sailors Loretta 804 274 3225
Johnston Jeffrey 804 274 3285
Jicha James 804 274 3485
Sailors Eugene 804 393 5525
Hanshaw Harold 804 393 5565
Fischer Francis 804 393 6065
Bogenreit Charles 804 393 6155
John Ted 804 393 6175
Fischer William 804 393 6225
Schweitzer Fred 804 746 2285
Clements Richard 804 746 2340
Kuehn Oral 804 746 2635
Huxbold Kevin 804 746 2665
Bornemeier Dan 804 746 2685
Root Howard 804 746 3535
Hanshaw Gary 804 746 5525
Sheard Donald 804 746 6355
Smith Brett 804 746 6595
Schreiner James 804 746 6645

是的,发生了很多事情。主要的是我需要知道如何访问传递给 alphaGreater 的对象变量firstName 是主要的。提前致谢!

【问题讨论】:

  • 我应该以什么其他方式呈现代码块?

标签: c++ arrays sorting object


【解决方案1】:

这样的代码:

    if(item < lastName)

应该是这样的:

    if(item.lastName < lastName)

【讨论】:

  • 您是最棒的。我有一个错误清单,就像它真的很长,而这只是解决了所有问题。日后应注意谢谢!
【解决方案2】:

您需要在您的 PhoneEntry 类中有一个返回姓氏的 getter 方法。 您不能直接访问它们,因为您已将它们声明为私有变量。 您需要为它们提供公共 getter 方法。 公共 getLastName() { 返回姓氏; }

【讨论】:

    【解决方案3】:

    使用公共成员函数函数访问私有数据成员。 公共函数可以在类外调用为objectname.memberfunction();

    +1 将其作为家庭作业问题发布!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-26
      • 2012-08-26
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多