首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么将这段c代码,改写成c++,面向对象风格的

2012-02-22 
如何将这段c代码,改写成c++,面向对象风格的大家好阿,有这样一段代码,很明确,一个enum 是不同种类的ID,几个

如何将这段c代码,改写成c++,面向对象风格的
大家好阿,有这样一段代码,很明确,一个enum 是不同种类的ID,几个struct是根据不同id构成的。现在要改成面向对象风格,应该怎么弄才很OOP阿,谢谢阿。我想到是用enum in class,但不是很清楚,对应不同的id,怎么初始话不同的成员变量呢。

C/C++ code
typedef enum {    id_phone_extension,    id_age,    id_house_number} id_kind;typedef struct {    id_kind id;    unsigned int areaCode;    unsigned long sevenDigitNumber;} phone_extension;typedef struct {    id_kind id;    unsigned int ageYears;} age;typedef struct {    id_kind id;    unsigned long houseNumber;} house_number;void showData(void *data[], int nData){    std::cout << "\n";    for ( int i=0; i < nData; ++i ) {        id_kind id = *(reinterpret_cast<const id_kind*>(data[i]));        std::cout << "Element index number " << i << " is a ";         switch ( id ) {                case id_phone_extension:            const phone_extension *pPhone;                            pPhone = reinterpret_cast<const phone_extension*>(data[i]);            std::cout << "Phone extension (" << pPhone->areaCode << ") " << pPhone->sevenDigitNumber << "\n";            break;        case id_age:                        const age *pAge;                        pAge = reinterpret_cast<const age*>(data[i]);            std::cout << "Age " << pAge->ageYears << "\n";            break;        case id_house_number:            const house_number *pHouse;                        pHouse = reinterpret_cast<const house_number*>(data[i]);            std::cout << "House number " << pHouse->houseNumber << "\n";                        break;        }    }}int main(){    phone_extension ph1 = { id_phone_extension, 313, 4567892 };    phone_extension ph2 = { id_phone_extension, 800, 3334455 };    age age1 = { id_age, 39 };    age age2 = { id_age, 21 };    house_number hn1 = { id_house_number, 44842 };    void* data[5];    data[0] = &ph1;    data[1] = &ph2;    data[2] = &age1;    data[3] = &hn1;    data[4] = &age2;    showData(data,5);    return 1;}


[解决办法]
没怎么整理,大致是这样的,没有用多态,LZ自己再整理下吧
C/C++ code
class Base{private:    virtual void vShow()const = 0;public:    void show()const{vShow();}};class phone_extension:public Base{private:    unsigned int areaCode;    unsigned long sevenDigitNumber;public:    phone_extension(unsigned int areaCode, unsigned long sevenDigitNumber):areaCode(areaCode),sevenDigitNumber(sevenDigitNumber){}private:    void vShow()const{        std::cout << "Phone extension (" << areaCode << ") " << sevenDigitNumber << "\n";    }};class house_number:public Base{private:    unsigned long houseNumber;public:    house_number(unsigned long houseNumber):houseNumber(houseNumber){}private:    void vShow()const{        std::cout << "House number " << houseNumber << "\n";    }};class age:public Base{private:    unsigned int ageYears;public:    age(unsigned int ageYears):ageYears(ageYears){}private:    void vShow()const{        std::cout << "Age " << ageYears << "\n";    }};int main(){    phone_extension ph1( 313, 4567892);    phone_extension ph2(800, 3334455 );    age age1(39);    ph1.show();    age1.show();    return 1;} 

热点排行