为什么我不能从我的 setMonth 函数更改类变量"name"?
Why can't I change the class variable "name" from my setMonth function?
这是一个家庭作业问题。我可以使它起作用,但我不想在每个过载的操作员功能中放置一个开关语句。我正在处理的是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
。
您需要将其作为成员函数实现,以设置当前对象的成员。
也就是说,通常一个月的对象不需要持有名称,因为可以根据需要检索它。
相关文章:
- 查找后更改类变量
- 如何避免在仅标头库中C++类/变量重定义
- c++ 在非类函数中使用类变量
- 基于模板的类变量
- 分段 访问私有类变量时出错
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 模板类变量作为非模板类的成员
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- 如何在构造函数中访问类变量以分配它们,而无需在C++中使用此指针
- 类变量无法从类方法访问
- 指针作为类变量 Qt
- 为什么线程对类变量所做的更改没有影响?
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- C++:使用基类中的仅派生类变量
- 从静态成员函数访问私有非静态类变量 - C++
- 静态类变量的多重定义
- 使用 WindowSetup 类变量获取错误
- 将文本文件读入类变量 - c++
- 为什么我不能从我的 setMonth 函数更改类变量"name"?