fork download
  1. #include <iostream>
  2.  
  3. namespace java { namespace lang {
  4. class Object;
  5. class String;
  6.  
  7. class Object
  8. {
  9. public:
  10. Object() { }
  11. virtual String toString() const ;
  12. };
  13. class String : public Object {
  14. friend void println(String& str);
  15. protected:
  16. char *str;
  17. unsigned long len;
  18. public:
  19. String() { str = new char[1]; *str = '\0'; len = 0; }
  20. String(unsigned long val);
  21. String(char* s);
  22. String(const String& another);
  23. ~String() { delete [] str; }
  24. String toString() const;
  25. unsigned long length() const;
  26. String operator + (const String& another) const;
  27. String& operator = (const String& ref);
  28. };
  29.  
  30. String Object::toString() const {
  31. return String("Object:") + String((unsigned long)this);
  32. }
  33.  
  34. String::String(unsigned long val) {
  35. char temp[33];
  36. unsigned long digit = 0;
  37. do {
  38. temp[digit] = (char)(val % 10);
  39. val /= 10;
  40. digit++;
  41. } while (val > 0);
  42. str = new char[digit + 1];
  43. str[digit] = '\0';
  44. len = digit;
  45. for (unsigned long i = 0; i < digit; ++i) {
  46. str[i] = temp[digit - i - 1] + '0';
  47. }
  48. }
  49.  
  50. String::String(char *s) {
  51. len = 0;
  52. char *t;
  53. for (t = s; *t != '\0'; ++t) {
  54. len++;
  55. }
  56. str = new char[len + 1];
  57. for (unsigned long i = 0; i < len; ++i) {
  58. str[i] = s[i];
  59. }
  60. str[len] = '\0';
  61. }
  62.  
  63. String::String(const String& another) {
  64. len = another.len;
  65. str = new char[len + 1];
  66. for (unsigned long i = 0; i < len; ++i) {
  67. str[i] = another.str[i];
  68. }
  69. str[len] = '\0';
  70. }
  71.  
  72. String String::toString() const { return *this; }
  73. unsigned long String::length() const { return len; }
  74.  
  75. String String::operator + (const String& another) const {
  76. unsigned long sum = len + another.len;
  77. char *tempstr = new char[sum + 1];
  78. for (unsigned long i = 0; i < len; ++i) {
  79. tempstr[i] = str[i];
  80. }
  81. for (unsigned long i = 0; i < another.len; ++i) {
  82. tempstr[len + i] = another.str[i];
  83. }
  84. tempstr[sum] = '\0';
  85. String temp;
  86. delete [] temp.str;
  87. temp.str = tempstr;
  88. temp.len = sum;
  89. return temp;
  90. }
  91.  
  92. String& String::operator = (const String& ref) {
  93. delete [] str;
  94. len = ref.len;
  95. str = new char[len + 1];
  96. for (unsigned long i = 0; i < len; i++) {
  97. str[i] = ref.str[i];
  98. }
  99. str[len] = '\0';
  100. return *this;
  101. }
  102.  
  103. void println(String& str) {
  104. using namespace std;
  105. cout << str.str << endl;
  106. }
  107.  
  108. }}
  109.  
  110. int main() {
  111. using namespace java::lang;
  112. Object obj;
  113. String str(obj.toString());
  114. String hoge("Hoge");
  115. String h2(hoge + str);
  116. println(str);
  117. println(hoge);
  118. println(h2);
  119. return 0;
  120. }
Success #stdin #stdout 0s 3476KB
stdin
Standard input is empty
stdout
Object:3218099256
Hoge
HogeObject:3218099256