为什么我不能从我的 setMonth 函数更改类变量"name"?

Why can't I change the class variable "name" from my setMonth function?

本文关键字:类变量 name 函数 不能 我的 setMonth 为什么      更新时间:2023-10-16

这是一个家庭作业问题。我可以使它起作用,但我不想在每个过载的操作员功能中放置一个开关语句。我正在处理的是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);

}

您的 setMonth()函数是一个免费功能,在临时Month对象上设置月份名称obj

您需要将其作为成员函数实现,以设置当前对象的成员。

也就是说,通常一个月的对象不需要持有名称,因为可以根据需要检索它。