Summary Files Commits Branches @commit @diff @stats
path: root / Year 1 / Object-oriented Programming / Solutions Sem. 08 / ex3 / DynStr.cpp
diff options
context:
space:
mode:
1 files changed, 50 insertions, 0 deletions
-rw-r--r--Year 1/Object-oriented Programming/Solutions Sem. 08/ex3/DynStr.cpp50
diff --git a/Year 1/Object-oriented Programming/Solutions Sem. 08/ex3/DynStr.cpp b/Year 1/Object-oriented Programming/Solutions Sem. 08/ex3/DynStr.cpp
new file mode 100644
index 0000000..4f4d52e
--- /dev/null
+++ b/Year 1/Object-oriented Programming/Solutions Sem. 08/ex3/DynStr.cpp
@@ -0,0 +1,50 @@
+#include "DynStr.h"
+#include <cstring>
+
+/* Private */
+
+void DynStr::free() {
+ if(str != nullptr) delete[] str;
+}
+
+void DynStr::copyFrom(const DynStr& other) {
+ length = other.length;
+
+ str = new char[length];
+ for (int i = 0; i < length; i++)
+ str[i] = other.str[i];
+}
+
+/* Public */
+
+DynStr::DynStr() {
+ str = nullptr;
+ length = 0;
+}
+
+DynStr::DynStr(const char* str) {
+ int strLen = strlen(str);
+ this->str = new char[strLen];
+ strcpy(this->str, str);
+ length = strLen;
+}
+
+DynStr::DynStr(const DynStr& copy) {
+ copyFrom(copy);
+}
+
+DynStr& DynStr::operator=(const DynStr& other) {
+ if (this != &other) {
+ free();
+ copyFrom(other);
+ }
+ return *this;
+}
+
+DynStr::~DynStr() {
+ free();
+}
+
+const char* DynStr::get_str() const {
+ return str;
+}