Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Object-oriented Programming / 13-Practice-31.05.2022 / String.h
diff options
context:
space:
mode:
Commitccedf6f5d89f375580ff6af40296aab953f9cd09 (patch)
Author
 Syndamia <kamen.d.mladenov@protonmail.com>
2022-05-31 20:52:26 +0300
Committer
 Syndamia <kamen.d.mladenov@protonmail.com>
2022-05-31 20:52:26 +0300
Files2b2881b8fb473b1892238b63b82c76b85fa8357d /Year 1/Object-oriented Programming/13-Practice-31.05.2022/String.h
uni-projects-ccedf6f5d89f375580ff6af40296aab953f9cd09.tar
uni-projects-ccedf6f5d89f375580ff6af40296aab953f9cd09.tar.gz
uni-projects-ccedf6f5d89f375580ff6af40296aab953f9cd09.zip
Parent24bdf39e6c21ab846f6c86803761d78a094e05c0 (diff)
Added work from today's practice
1 files changed, 56 insertions, 0 deletions
-rw-r--r--Year 1/Object-oriented Programming/13-Practice-31.05.2022/String.h56
diff --git a/Year 1/Object-oriented Programming/13-Practice-31.05.2022/String.h b/Year 1/Object-oriented Programming/13-Practice-31.05.2022/String.h
new file mode 100644
index 0000000..84fbe9c
--- /dev/null
+++ b/Year 1/Object-oriented Programming/13-Practice-31.05.2022/String.h
@@ -0,0 +1,56 @@
+#ifndef HEADER_STRING
+#define HEADER_STRING
+
+/*! \file String.h
+ * \brief Stores declaration of class String
+ */
+
+#include <istream>
+#include <ostream>
+
+class String {
+ char* str;
+ unsigned length;
+
+ void free();
+ void copyFrom(const String& other);
+
+public:
+ //! The underlying array is allocated with length (+ 1) size
+ String(unsigned length);
+ //! Copies str
+ String(const char* str);
+ //! Returns internal C-style string
+ const char* get_cstr() const;
+ //! Returns number of characters in string
+ unsigned get_length() const;
+ //! Returns a character reference (from the underlying C-style string) at the given index
+ char& operator[](unsigned index);
+
+ //! Appends a C-style string
+ String& operator+=(const char* str);
+ //! Appends a number
+ String& operator+=(unsigned number);
+
+ String();
+ String(const String& other);
+ String& operator=(const String& other);
+ ~String();
+
+ String(String&& other);
+ String& operator=(String&& other);
+
+ //! Reads String from stream
+ void read(std::istream& istr);
+ //! Writes String to stream
+ void write(std::ostream& ostr) const;
+ //! Compares two strings
+ int compare(const String& other) const;
+
+ //! Reads String from stream with >> operator
+ friend std::istream& operator>>(std::istream& istr, String& event);
+ //! Writes String to stream with << operator
+ friend std::ostream& operator<<(std::ostream& ostr, const String& event);
+};
+
+#endif