fork download
  1. #include <iostream>
  2.  
  3. struct NumberObject;
  4. struct NumberString;
  5.  
  6. struct DataType
  7. {
  8. virtual ~DataType() = default;
  9. virtual void operator=(const DataType&) = 0;
  10. virtual void assignTo(NumberObject&) const = 0;
  11. virtual void assignTo(NumberString&) const = 0;
  12. };
  13.  
  14. struct NumberObject : DataType
  15. {
  16. double data = 7;
  17. void operator=(const DataType& rhs) override { rhs.assignTo(*this); }
  18.  
  19. void assignTo(NumberObject& rhs) const override
  20. {
  21. std::cout << "Copying from NumberObject to NumberObject\n";
  22. }
  23. void assignTo(NumberString& rhs) const override
  24. {
  25. std::cout << "Copying from NumberObject to NumberString\n";
  26. }
  27. };
  28.  
  29. struct NumberString : DataType
  30. {
  31. std::string data = "7";
  32. void operator=(const DataType& rhs) override { rhs.assignTo(*this); }
  33.  
  34. void assignTo(NumberObject& rhs) const override
  35. {
  36. std::cout << "Copying from NumberString to NumberObject\n";
  37. }
  38. void assignTo(NumberString& rhs) const override
  39. {
  40. std::cout << "Copying from NumberString to NumberString\n";
  41. }
  42. };
  43.  
  44.  
  45.  
  46. int main()
  47. {
  48. NumberObject number;
  49. NumberString string;
  50.  
  51. DataType* pDataType1 = &number;
  52. DataType* pDataType2 = &string;
  53. *pDataType1 = *pDataType2;
  54. }
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
Copying from NumberString to NumberObject