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
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

View File

@ -4,20 +4,20 @@
#include <iterator>
#include <stdexcept>
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<double> vector;
std::vector<double> data;
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
{
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<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()
@ -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<int> d(20,10);
d.printValues();
return 0;
}

Binary file not shown.