This commit is contained in:
Leon Wilzer 2022-12-28 15:41:02 +01:00
parent cf61ed4168
commit 4c37b6a85e
3 changed files with 72 additions and 18 deletions

View File

@ -40,17 +40,15 @@ sheet06:
chmod +x build/sheet06 chmod +x build/sheet06
build/sheet06 build/sheet06
<<<<<<< HEAD
sheet08:
$(CC) src/sheet08.cpp -o build/sheet08
chmod +x build/sheet08
build/sheet08
=======
sheet07: sheet07:
$(CC) src/sheet07.cpp -o build/sheet07 $(CC) src/sheet07.cpp -o build/sheet07
chmod +x build/sheet07 chmod +x build/sheet07
build/sheet07 build/sheet07
>>>>>>> e65a4df5f798869a10f26c50fc46a7b701763d43
sheet08:
$(CC) src/sheet08.cpp -o build/sheet08
chmod +x build/sheet08
build/sheet08
pizza: pizza:
$(CC) src/pizza.cpp -o build/pizza $(CC) src/pizza.cpp -o build/pizza

View File

@ -4,20 +4,20 @@
#include <iterator> #include <iterator>
#include <stdexcept> #include <stdexcept>
class base class base2
{ {
public: public:
virtual ~base() = default; virtual ~base2() = default;
virtual void whoAmI() { std::cout << "I am base.\n"; } virtual void whoAmI() { std::cout << "I am base.\n"; }
}; };
class derived_one : public base class derived_one : public base2
{ {
public: public:
void whoAmI() override { std::cout << "I am derived_one.\n"; } void whoAmI() override { std::cout << "I am derived_one.\n"; }
}; };
class derived_two : public base class derived_two : public base2
{ {
public: public:
void whoAmI() override { std::cout << "I am derived_two.\n"; } void whoAmI() override { std::cout << "I am derived_two.\n"; }
@ -51,7 +51,7 @@ class speaker : public greetings, public politeness
class container class container
{ {
public: public:
virtual ~container() = default;; virtual ~container() = default;
virtual double& operator[](size_t idx) = 0; virtual double& operator[](size_t idx) = 0;
virtual const double& operator[](size_t idx) const = 0; virtual const double& operator[](size_t idx) const = 0;
virtual size_t size() const = 0; virtual size_t size() const = 0;
@ -60,17 +60,17 @@ class container
class vec : public container class vec : public container
{ {
private: private:
std::vector<double> vector; std::vector<double> data;
public: public:
vec(size_t size) : vector(std::vector<double>(size)) {} vec(size_t size) : data(std::vector<double>(size)) {}
double& operator[](size_t idx) override double& operator[](size_t idx) override
{ {
if(idx>=size()) if(idx>=size())
{ {
throw std::domain_error("Index larger than vector"); throw std::domain_error("Index larger than vector");
} }
return vector[idx]; return data[idx];
} }
const double& operator[](size_t idx) const override const double& operator[](size_t idx) const override
@ -79,10 +79,10 @@ class vec : public container
{ {
throw std::domain_error("Index larger than vector"); 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 class lst : public container
@ -116,6 +116,49 @@ class lst : public container
return *begin; return *begin;
} }
size_t size() const override { return data.size(); }
};
void fill_container(container& c)
{
for(size_t i = 0; i<c.size(); ++i)
{
c[i] = i + 1;
}
}
double sum_container(const container& c)
{
double sum = 0;
for(size_t i = 0; i<c.size(); ++i)
{
sum +=c[i];
}
return sum;
}
template<class T> class base
{
protected:
T base_value;
public:
base(T t) : base_value(t) {}
};
template<class T> class derived : public base<T>
{
private:
T derived_value;
using base<T>::base_value;
public:
derived(T t, T u) : base<T>(u), derived_value(t) {}
void printValues()
{
std::cout << base_value << '\n';
std::cout << derived_value << '\n';
};
}; };
int main() int main()
@ -124,7 +167,7 @@ int main()
d1.whoAmI(); d1.whoAmI();
derived_two d2; derived_two d2;
d2.whoAmI(); d2.whoAmI();
base b; base2 b;
b.whoAmI(); b.whoAmI();
speaker s; speaker s;
@ -133,4 +176,17 @@ int main()
s.say_please(); s.say_please();
s.say_thanks(); s.say_thanks();
s.say_you_are_welcome(); 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<int> d(20,10);
d.printValues();
return 0;
} }

Binary file not shown.