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