C++ 如何在此程序中显示返回枚举类型数据的函数
我已经实现了Date类,该类旨在显示不同的日期格式。我在d1.Display_version3有问题;它无法正确返回枚举数据。如何更改代码?这是我的密码:C++ 如何在此程序中显示返回枚举类型数据的函数,c++,enums,C++,Enums,我已经实现了Date类,该类旨在显示不同的日期格式。我在d1.Display_version3有问题;它无法正确返回枚举数据。如何更改代码?这是我的密码: //Decleration of Class Date. #ifndef DATE_H #define DATE_H class Date{ private: int day; int month; int year; enum Month {
//Decleration of Class Date.
#ifndef DATE_H
#define DATE_H
class Date{
private:
int day;
int month;
int year;
enum Month {
January, February, March, April, May, June,
July, August,September,October, November, December
};
Month m;
int checkdate(int);
public:
/*Overloading Constructors*/
Date(int = 1, int = 1, int = 1900);//constructor 1
Date(int = 1, Month = January, int = 1900);//constructor 2
/*Read functions*/
int read_date() const;
int read_month() const;
int read_year() const;
Month read_month_ex() const;
/*Display Functions*/
void Display_version1() const;//mm/dd/yy
void Display_version2() const;//dd.mm.YYYY
void Display_version3() const;//May 14,1992
};
#endif
/*Decleration of the Class Members*/
#include<iostream>
using std::cout;
using std::endl;
#include "date.h"
Date::Date(int dd, int mm, int yy){
month = (mm>0 && mm<12) ? mm : 1;//ensure that month is valid
year = yy;
day=checkdate(dd);
}
Date::Date(int dd, Month mm, int yy){
m = (mm>January && mm<December) ? mm : January;//ensure that month is valid
year = yy;
day = checkdate(dd);
}
int Date::checkdate(int dd){
static const int daysinamonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (dd>0 && dd <= daysinamonth[month]);
return dd;
if (month==2 && dd==29 &&(year%400==0 || (year%4==0 && year%100!=0)));
return dd;
return 1;//if it is not valid date.
}
int Date::read_date() const{
return day;
};
int Date::read_month() const{
return month;
};
int Date::read_year() const{
return year;
};
Date::Month Date::read_month_ex() const{
return m;
};
void Date::Display_version1() const{
cout << read_month() << "." << read_date() << "." << (read_year()-1900) << endl;
};//mm/dd/yy
void Date::Display_version2() const{
cout << read_date() << "." << read_month() << "." << read_year() << endl;
};//dd.mm.YYYY
void Date::Display_version3() const{
cout << read_month_ex() <<" "<< read_date() << "," << read_year() << endl;
};//May 14,1992
#include<iostream>
using std::cout;
using std::endl;
#include"date.h"
int main(){
Date d1(5, 10, 1990);
d1.Display_version1();//mm/dd/yy
d1.Display_version2();//dd.mm.YYYY
d1.Display_version3();//display as May 14,1992, problem is here!!!
while (1);
}
将返回类型从enum更改为const char*: 你打字的时候
enum Month {
January, February, March, April, May, June,
July, August,September,October, November, December
};
编译器实际上不会在程序中的任何位置放置类似于“二月”的字符串,除非可能在单独的调试数据部分中。它所做的只是了解到Date::Month是一种新类型,而像Date::Junary这样的枚举数就是这种类型的值,用数字表示。因为您让它选择数字,所以它使用一月=0,二月=1。。。12月11日。就运行的代码而言,这些值几乎只是数字,它不知道它们被调用了什么,就像int x是一个存储区域,程序也不知道它的名称是x
所以你必须自己在某处提供字符串。这里最简单的方法可能是使用数组,因为数值顺序为0到11:
class Date {
public:
const char* read_month_ex() const;
// ...
private:
static char const* const month_names[12];
};
char const* const Date::month_names[12] = {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
};
const char* Date::read_month_ex() const {
return month_names[m];
}
在编译时,你不会显示他们最知道的函数,并且在运行时不完全存在。为了显示一些EnUM值,你必须做一个函数显示它,考虑使用一个开关,或者一个常量静态或全局数组的常量字符串…
class Date {
public:
const char* read_month_ex() const;
// ...
private:
static char const* const month_names[12];
};
char const* const Date::month_names[12] = {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
};
const char* Date::read_month_ex() const {
return month_names[m];
}