回 帖 发 新 帖 刷新版面

主题:关于枚举类型

编制一个使用颜色枚举类型的程序。创建一个enum类型的变量,然后用for循环输出与颜色名对应的数字。

用C:
#include <stdio.h>
#include <stdlib.h>
int main()
{
    enum color{white,red,blue,yellow,green,black};
    enum color co=white;
    for(;co<=black;co++)
        printf("%d\n",co);
    return 0;
}
可通过编译!

但是用C++:
#include <iostream>
using namespace std;
enum color{white,red,blue,yellow,green,black};
int main()
{
    for(color co=white;co<=black;co++)
        cout<<co<<endl;
    cout << "Hello world!" << endl;
    return 0;
}
却不能通过编译!
请问用C++如何实现题目要求?

回复列表 (共4个回复)

沙发

因为C++对类型检查更加严格了。一个int是无法隐式的转化为enum的。在没有自己定义operator ++的情况下,enum也无法进行++操作。

[code=c]#include <iostream>
using namespace std;
enum color{
    white,red,blue,yellow,green,black
};

color& operator ++(color& c) {
    c = (color)(c + 1);
    return c;
}

color operator ++(color& c, int) {
    color c2 = c;
    ++c;
    return c2;
}

int main()
{
    for(color co=white;co<=black;co++)
        cout<<co<<endl;
    cout << "Hello world!" << endl;
    return 0;
}[/code]

板凳


[em3] 学习 

3 楼

C++由于要实现重载的关系放弃了C里很多的隐式转换关系,所以说C++不完全包含C,这就是目前最明显的那一点不同了

4 楼

学习了  那就显示强制转换

我来回复

您尚未登录,请登录后再回复。点此登录或注册