Vehicle友元Date多态Sedan和Truck

鼠扑  论坛元老 | 2024-11-8 15:27:43 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 2014|帖子 2014|积分 6042

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

main.cpp
  1. #include <iostream>
  2. #include "Vehicle.h"
  3. #include "Sedan.h"
  4. #include "Truck.h"
  5. using namespace std;
  6. int main()
  7. {
  8.     Vehicle vehicle("Generic", 100, "Gray", Date(2005, 6, 6));
  9.     Sedan sedan1("Toyota", 200, "Red", Date(2020, 1, 15), 5, 4);
  10.     Sedan sedan2("Honda", 201, "Blue", Date(2021, 5, 20), 4, 6);
  11.     Truck truck1("Ford", 300, "Black", Date(2019, 10, 5), 18, 40.0);
  12.     Truck truck2("Chevy", 301, "Silver", Date(2022, 3, 10), 20, 50.0);
  13.     Vehicle* vehicles[] = {&vehicle, &sedan1, &sedan2, &truck1, &truck2};
  14.     for (const auto& vehiclePtr : vehicles)
  15.     {
  16.         vehiclePtr->print();
  17.     }
  18.     return 0;
  19. }
复制代码
Date.h
  1. #ifndef DATE_H
  2. #define DATE_H
  3. #include <iostream>
  4. using namespace std;
  5. class Date
  6. {
  7.     friend class Vehicle;
  8. public:
  9.     Date();
  10.     Date(int y, int m, int d);
  11.     ~Date();
  12.     void setYear(int y);
  13.     void setMonth(int m);
  14.     void setDay(int d);
  15.     int getYear();
  16.     int getMonth();
  17.     int getDay();
  18.     void print();
  19. private:
  20.     int Year;
  21.     int Month;
  22.     int Day;
  23. };
  24. #endif // DATE_H
复制代码
 Date.cpp
  1. #include "Date.h"
  2. #include <iostream>
  3. using namespace std;
  4. Date::Date()
  5. {
  6.     Year = 0;
  7.     Month = 0;
  8.     Day = 0;
  9. }
  10. Date::Date(int year, int month, int day)
  11. {
  12.     setYear(year);
  13.     setMonth(month);
  14.     setDay(day);
  15. }
  16. Date::~Date()
  17. {
  18.     //cout << "object Destructor is called" << endl;
  19. }
  20. void Date::setYear(int year)
  21. {
  22.     Year = year;
  23. }
  24. void Date::setMonth(int month)
  25. {
  26.     Month = month;
  27. }
  28. void Date::setDay(int day)
  29. {
  30.     Day = day;
  31. }
  32. int Date::getYear()
  33. {
  34.     return Year;
  35. }
  36. int Date::getMonth()
  37. {
  38.     return Month;
  39. }
  40. int Date::getDay()
  41. {
  42.     return Day;
  43. }
  44. void Date::print()
  45. {
  46.     cout << endl;
  47.     cout << "Year :" << getYear() << endl;
  48.     cout << "Month :" << getMonth() << endl;
  49.     cout << "Day :" << getDay() << endl;
  50. }
复制代码
Sedan.h
  1. #ifndef SEDAN_H
  2. #define SEDAN_H
  3. #include <iostream>
  4. #include "Vehicle.h"
  5. using namespace std;
  6. class Sedan :public Vehicle
  7. {
  8. public:
  9.     Sedan();
  10.     Sedan(string brand, int model, string color, Date MFD, int NOP, int NOA);
  11.     ~Sedan();
  12.     void setNumberOfPassenger(int P);
  13.     int getNumberOfPassenger();
  14.     void setNumberOfAirbag(int A);
  15.     int getNumberOfAirbag();
  16.     void print();
  17. private:
  18.     int NumberOfPassenger;
  19.     int NumberOfAirbag;
  20. };
  21. #endif // SEDAN_H
复制代码
Sedan.cpp
  1. #include "Sedan.h"
  2. #include <iostream>
  3. using namespace std;
  4. Sedan::Sedan()
  5. {
  6.     NumberOfPassenger = 0;
  7.     NumberOfAirbag = 0;
  8. }
  9. Sedan::Sedan(string brand, int model, string color, Date MFD, int NOP, int NOA)
  10. {
  11.     setBrand(brand);
  12.     setModel(model);
  13.     setColor(color);
  14.     setManufactureDate(MFD);
  15.     setNumberOfPassenger(NOP);
  16.     setNumberOfAirbag(NOA);
  17. }
  18. Sedan::~Sedan()
  19. {
  20. }
  21. void Sedan::setNumberOfPassenger(int P)
  22. {
  23.     NumberOfPassenger = P;
  24. }
  25. int Sedan::getNumberOfPassenger()
  26. {
  27.     return NumberOfPassenger;
  28. }
  29. void Sedan::setNumberOfAirbag(int A)
  30. {
  31.     NumberOfAirbag = A;
  32. }
  33. int Sedan::getNumberOfAirbag()
  34. {
  35.     return NumberOfAirbag;
  36. }
  37. void Sedan::print()
  38. {
  39.     Vehicle::print();
  40.     cout << "Number of Passengers: " << NumberOfPassenger << ", Number of Airbags: " << NumberOfAirbag << endl;
  41. }
复制代码
Truck.h
  1. #ifndef TRUCK_H
  2. #define TRUCK_H
  3. #include "Vehicle.h"
  4. using namespace std;
  5. class Truck : public Vehicle
  6. {
  7. public:
  8.     Truck();
  9.     Truck(string brand, int model, string color, Date MFD, int NOW, double TC);
  10.     ~Truck();
  11.     void setNumberOfWheel(int NOW);
  12.     int getNumberOfWheel();
  13.     void setTowingCapacity(double TC);
  14.     double getTowingCapacity();
  15.     void print();
  16. private:
  17.     int NumberOfWheel;
  18.     double TowingCapacity;
  19. };
  20. #endif // TRUCK_H
复制代码
Truck.cpp
  1. #include "Truck.h"
  2. #include <iostream>
  3. using namespace std;
  4. Truck::Truck()
  5. {
  6.     NumberOfWheel = 0;
  7.     TowingCapacity = 0;
  8. }
  9. Truck::Truck(string brand, int model, string color, Date MFD, int NOW, double TC)
  10. {
  11.     setBrand(brand);
  12.     setModel(model);
  13.     setColor(color);
  14.     setManufactureDate(MFD);
  15.     setNumberOfWheel(NOW);
  16.     setTowingCapacity(TC);
  17. }
  18. Truck::~Truck()
  19. {
  20. }
  21. void Truck::setNumberOfWheel(int NOW)
  22. {
  23.     NumberOfWheel = NOW;
  24. }
  25. int Truck::getNumberOfWheel()
  26. {
  27.     return NumberOfWheel;
  28. }
  29. void Truck::setTowingCapacity(double TC)
  30. {
  31.     TowingCapacity = TC;
  32. }
  33. double Truck::getTowingCapacity()
  34. {
  35.     return TowingCapacity;
  36. }
  37. void Truck::print()
  38. {
  39.     Vehicle::print();
  40.     cout << "Number of Wheels: " << NumberOfWheel << ", Towing Capacity: " << TowingCapacity << " tons" << endl;
  41. }
复制代码
Vehicle.h
  1. #ifndef VEHICLE_H
  2. #define VEHICLE_H
  3. #include <iostream>
  4. #include "Date.h"
  5. using namespace std;
  6. class Vehicle
  7. {
  8. public:
  9.     Vehicle();
  10.     Vehicle(string brand, int model, string color, Date MFD);
  11.     ~Vehicle();
  12.     void setBrand(string brand);
  13.     string getBrand();
  14.     void setModel(int id);
  15.     int getModel();
  16.     void setColor(string color);
  17.     string getColor();
  18.     void setManufactureDate(Date d);
  19.     Date getManufactureDate();
  20.     virtual void print();
  21. private:
  22.     string Brand;
  23.     int Model;
  24.     string Color;
  25.     Date ManufactureDate;
  26. };
  27. #endif // VEHICLE_H
复制代码
Vehicle.cpp
  1. #include "Vehicle.h"
  2. #include <iostream>
  3. using namespace std;
  4. Vehicle::Vehicle()
  5. {
  6.     Brand = "XXX";
  7.     Model = 10086;
  8.     Color = "Black";
  9. }
  10. Vehicle::Vehicle(string brand, int model, string color, Date MFD)
  11. {
  12.     setBrand(brand);
  13.     setModel(model);
  14.     setColor(color);
  15.     setManufactureDate(MFD);
  16. }
  17. Vehicle::~Vehicle()
  18. {
  19. }
  20. void Vehicle::setBrand(string brand)
  21. {
  22.     Brand = brand;
  23. }
  24. string Vehicle::getBrand()
  25. {
  26.     return Brand;
  27. }
  28. void Vehicle::setModel(int id)
  29. {
  30.     Model = id;
  31. }
  32. int Vehicle::getModel()
  33. {
  34.     return Model;
  35. }
  36. void Vehicle::setColor(string color)
  37. {
  38.     Color = color;
  39. }
  40. string Vehicle::getColor()
  41. {
  42.     return Color;
  43. }
  44. void Vehicle::setManufactureDate(Date d)
  45. {
  46.     ManufactureDate = d;
  47. }
  48. Date Vehicle::getManufactureDate()
  49. {
  50.     return ManufactureDate;
  51. }
  52. void Vehicle::print()
  53. {
  54.     cout << "Brand: " << Brand << ", Model: " << Model << ", Color: " << Color << ", ManufactureDate: ";
  55.     ManufactureDate.print();
  56.     cout << endl;
  57. }
复制代码
Result:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

鼠扑

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表