Почему я не могу изменить переменную класса «name» из моей функции setMonth?

0

Это проблема домашней работы. Я могу заставить его работать, но я не хочу приводить оператор switch в каждую перегруженную операторскую функцию. Я работаю над функцией Month Month::operator--(int). Когда я вызываю setMonth() и пытаюсь изменить имя, оно не изменяется.

// Name: Rocky Eadie
// Date: 1/29/2014
// Description: this program sets and retreives data from a class file

//includes
#include <iostream>
#include <string>
#include "Header.h"

using namespace std;

//begin main function
int main() 
{

//create month object
Month MonthObject;

//print contents of month object
cout << MonthObject;

//overloaded operator call
cin >> MonthObject;

//print contents of month object
cout << MonthObject;

//overloaded prefix increment operator
++MonthObject;

//print contents of month object
cout << MonthObject;

//overloaded postfix increment operator
MonthObject++;

//print contents of month object
cout << MonthObject;

//overloaded prefix decrement operator
--MonthObject;

//print contents of month object
cout << MonthObject;

//overloaded postfix increment operator
MonthObject--;

//print contents of month object
cout << MonthObject;

system("pause");
return 0;

//end main function
}

//functions



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

//prototypes
void setMonth(int);

class Month
{

//function prototypes

private:
//variables
string name;
int monthNumber;
public: 
//constructors
Month()
{
    monthNumber = 1;
    name = "January";
}

Month(string n)
{
    name = n;
}

Month(int mN)
{
    monthNumber = mN;
}

//accessors and mutators
int getMonth()
 {
    return monthNumber;
 }

void setMonth(int mN)
{
    monthNumber = mN;
}

string getName()
 {
    return name;
 }

void setName(string n)
 {
    name = n;   
 }

//prefix overload addition
Month Month::operator++()
{

    ++monthNumber;

    //month limit test
    if (monthNumber>12)
    {
        monthNumber = 1;
    }

    //sets month name
    switch (monthNumber)
    {
        case 1:
            name = "January";
                break;
        case 2:
            name = "February";
                break;
        case 3:
            name = "March";
                break;
        case 4:
            name = "April";
                break;
        case 5:
            name = "May";
                break;
        case 6:
            name = "June";
                break;
        case 7:
            name = "July";
                break;
        case 8:
            name = "August";
                break;
        case 9:
            name = "September";
                break;
        case 10:
            name = "October";
                break;
        case 11:
            name = "November";
                break;
        case 12:
            name = "December";
                break;
        default:
                break;
    }

    return *this;
//end prefix overload addition
}

//postfix overload addition
Month Month::operator++(int)
{

    Month temp(monthNumber);

    monthNumber++;

    //month limit test
    if (monthNumber>12)
    {
        monthNumber = 1;
    }

    //sets month name
    switch (monthNumber)
    {
        case 1:
            name = "January";
                break;
        case 2:
            name = "February";
                break;
        case 3:
            name = "March";
                break;
        case 4:
            name = "April";
                break;
        case 5:
            name = "May";
                break;
        case 6:
            name = "June";
                break;
        case 7:
            name = "July";
                break;
        case 8:
            name = "August";
                break;
        case 9:
            name = "September";
                break;
        case 10:
            name = "October";
                break;
        case 11:
            name = "November";
                break;
        case 12:
            name = "December";
                break;
        default:
                break;
    }

    return temp;

}

//prefix overload subtraction
Month Month::operator--()
{

    --monthNumber;

    //month limit test
    if (monthNumber<1)
    {
        monthNumber = 12;
    }

    //sets month name
    switch (monthNumber)
    {
        case 1:
            name = "January";
                break;
        case 2:
            name = "February";
                break;
        case 3:
            name = "March";
                break;
        case 4:
            name = "April";
                break;
        case 5:
            name = "May";
                break;
        case 6:
            name = "June";
                break;
        case 7:
            name = "July";
                break;
        case 8:
            name = "August";
                break;
        case 9:
            name = "September";
                break;
        case 10:
            name = "October";
                break;
        case 11:
            name = "November";
                break;
        case 12:
            name = "December";
                break;
        default:
                break;
    }

    return *this;
//end prefix overload addition
}

//postfix overload subtraction
Month Month::operator--(int)
{

    Month temp(monthNumber);

    monthNumber--;

    //month limit test
    if (monthNumber<1)
    {
        monthNumber = 12;
    }

    setMonth(monthNumber);

    return temp;

//end post overload subtraction 
}

//cout operator overload
friend ostream &operator << (ostream &strm, const Month &obj)
{
    strm << "Month name: " << obj.name << endl << "Month number: "   <<            obj.monthNumber << endl; 
    return strm;
}

//cin operator overload
friend istream &operator >> (istream &strm, Month &obj)
{
    cout << "Enter month name: " ;
    strm >> obj.name;

    cout << "Enter month number: " ;
    strm >> obj.monthNumber;

    return strm;
}




//end class Month
};

void setMonth(int n)
{

    //local variables
    string name;
    Month obj;

    //sets month name
    switch (n)
    {
        case 1:
            name = "January";
                break;
        case 2:
            name = "February";
                break;
        case 3:
            name = "March";
                break;
        case 4:
            name = "April";
                break;
        case 5:
            name = "May";
                break;
        case 6:
            name = "June";
                break;
        case 7:
            name = "July";
                break;
        case 8:
            name = "August";
                break;
        case 9:
            name = "September";
                break;
        case 10:
            name = "October";
                break;
        case 11:
            name = "November";
                break;
        case 12:
            name = "December";
                break;
        default:
                break;
    }

    //sets month name in Month class
    obj.setName(name);



}
  • 0
    Я так понимаю, они еще не покрыли enum . Подумайте об использовании std::array для названий месяцев. Столько избыточного кода там больно.
  • 0
    Пока нет, и да ... это то, что мне не нравится в этом.
Показать ещё 3 комментария
Теги:

1 ответ

1
Лучший ответ

setMonth() является свободной функцией, которая задает имя месяца на временном объекте Month называемом obj.

Вам нужно будет реализовать это как функцию-член, чтобы установить элементы текущего объекта.

При этом, как правило, объект месяца не должен содержать имя, так как он может быть получен с учетом номера месяца по мере необходимости.

  • 0
    На самом деле он имеет как свободную функцию, так и нестатический член.
  • 0
    спасибо ... лучше сейчас

Ещё вопросы

Сообщество Overcoder
Наверх
Меню