diff --git a/Makefile b/Makefile index 13c551c..42f2178 100755 --- a/Makefile +++ b/Makefile @@ -40,17 +40,15 @@ sheet06: chmod +x build/sheet06 build/sheet06 -<<<<<<< HEAD -sheet08: - $(CC) src/sheet08.cpp -o build/sheet08 - chmod +x build/sheet08 - build/sheet08 -======= sheet07: $(CC) src/sheet07.cpp -o build/sheet07 chmod +x build/sheet07 build/sheet07 ->>>>>>> e65a4df5f798869a10f26c50fc46a7b701763d43 + +sheet08: + $(CC) src/sheet08.cpp -o build/sheet08 + chmod +x build/sheet08 + build/sheet08 pizza: $(CC) src/pizza.cpp -o build/pizza diff --git a/src/sheet08.cpp b/src/sheet08.cpp index d2cb653..15c5dbd 100644 --- a/src/sheet08.cpp +++ b/src/sheet08.cpp @@ -4,20 +4,20 @@ #include #include -class base +class base2 { public: - virtual ~base() = default; + virtual ~base2() = default; virtual void whoAmI() { std::cout << "I am base.\n"; } }; -class derived_one : public base +class derived_one : public base2 { public: void whoAmI() override { std::cout << "I am derived_one.\n"; } }; -class derived_two : public base +class derived_two : public base2 { public: void whoAmI() override { std::cout << "I am derived_two.\n"; } @@ -51,7 +51,7 @@ class speaker : public greetings, public politeness class container { public: - virtual ~container() = default;; + virtual ~container() = default; virtual double& operator[](size_t idx) = 0; virtual const double& operator[](size_t idx) const = 0; virtual size_t size() const = 0; @@ -60,17 +60,17 @@ class container class vec : public container { private: - std::vector vector; + std::vector data; public: - vec(size_t size) : vector(std::vector(size)) {} + vec(size_t size) : data(std::vector(size)) {} double& operator[](size_t idx) override { if(idx>=size()) { throw std::domain_error("Index larger than vector"); } - return vector[idx]; + return data[idx]; } const double& operator[](size_t idx) const override @@ -79,10 +79,10 @@ class vec : public container { throw std::domain_error("Index larger than vector"); } - return vector[idx]; + return data[idx]; } - size_t size() const override { return vector.size(); } + size_t size() const override { return data.size(); } }; class lst : public container @@ -116,6 +116,49 @@ class lst : public container return *begin; } + size_t size() const override { return data.size(); } +}; + +void fill_container(container& c) +{ + for(size_t i = 0; i class base +{ + protected: + T base_value; + + public: + base(T t) : base_value(t) {} +}; + +template class derived : public base +{ + private: + T derived_value; + using base::base_value; + + public: + derived(T t, T u) : base(u), derived_value(t) {} + void printValues() + { + std::cout << base_value << '\n'; + std::cout << derived_value << '\n'; + }; }; int main() @@ -124,7 +167,7 @@ int main() d1.whoAmI(); derived_two d2; d2.whoAmI(); - base b; + base2 b; b.whoAmI(); speaker s; @@ -133,4 +176,17 @@ int main() s.say_please(); s.say_thanks(); s.say_you_are_welcome(); + + vec v = vec(10); + lst l = lst(10); + + fill_container(v); + std::cout << "Sum: " << sum_container(v) << '\n'; + + fill_container(l); + std::cout << "Sum: " << sum_container(l) << '\n'; + + derived d(20,10); + d.printValues(); + return 0; } \ No newline at end of file diff --git a/vgcore.13380 b/vgcore.13380 deleted file mode 100644 index 16a6e58..0000000 Binary files a/vgcore.13380 and /dev/null differ