Commit d4e88d176a37ae4d4a38b25a674d754e347ef360
1 parent
737eb743
Added some lecture 10 examples
Showing
5 changed files
with
201 additions
and
0 deletions
examples10/link.cpp
0 → 100644
| 1 | +#include <iostream> | ||
| 2 | +using namespace std; | ||
| 3 | + | ||
| 4 | +class Link | ||
| 5 | +{ | ||
| 6 | +public: | ||
| 7 | + Link* next; | ||
| 8 | + virtual void Print() = 0; | ||
| 9 | +}; | ||
| 10 | + | ||
| 11 | +class Displayed : public Link | ||
| 12 | +{ | ||
| 13 | +string name; | ||
| 14 | +public: | ||
| 15 | + Displayed(string n): name(n) {}; | ||
| 16 | + void Print() override { cout << name << endl; } | ||
| 17 | +; | ||
| 18 | +}; | ||
| 19 | + | ||
| 20 | +class Task : public Link | ||
| 21 | +{ | ||
| 22 | +string name; | ||
| 23 | +public: | ||
| 24 | + Task(string n): name(n) {}; | ||
| 25 | + void Print() override { cout << name << endl; } | ||
| 26 | +; | ||
| 27 | +}; | ||
| 28 | + | ||
| 29 | + | ||
| 30 | +class Satellite: public Task, public Displayed | ||
| 31 | +{ | ||
| 32 | + public: | ||
| 33 | + Satellite(string n): Task("Task:" + n), Displayed("Displayed:" + n) {}; | ||
| 34 | + void Print() override { Task::Print(); Displayed::Print();}; | ||
| 35 | +}; | ||
| 36 | + | ||
| 37 | +Link* insert(Link* list, Link* node) | ||
| 38 | +{ | ||
| 39 | + node->next = list; | ||
| 40 | + return node; | ||
| 41 | +} | ||
| 42 | + | ||
| 43 | + | ||
| 44 | +int main() | ||
| 45 | +{ | ||
| 46 | +Link* displayedList = NULL; | ||
| 47 | +displayedList = insert(displayedList, new Displayed("a")); | ||
| 48 | +displayedList = insert(displayedList, new Displayed("b")); | ||
| 49 | + | ||
| 50 | +Satellite* s = new Satellite("e"); | ||
| 51 | +Displayed* sd = s; | ||
| 52 | + | ||
| 53 | +displayedList = insert(displayedList, sd); | ||
| 54 | + | ||
| 55 | +Link* taskList = NULL; | ||
| 56 | +taskList = insert(taskList, new Task("c")); | ||
| 57 | +taskList = insert(taskList, new Task("d")); | ||
| 58 | + | ||
| 59 | +Task* st = s; | ||
| 60 | +taskList = insert(taskList, st); | ||
| 61 | + | ||
| 62 | +Link* iterator = displayedList; | ||
| 63 | + | ||
| 64 | +while(iterator) | ||
| 65 | +{ | ||
| 66 | + iterator->Print(); | ||
| 67 | + iterator=iterator->next; | ||
| 68 | +} | ||
| 69 | + | ||
| 70 | +iterator = taskList; | ||
| 71 | + | ||
| 72 | +while(iterator) | ||
| 73 | +{ | ||
| 74 | + iterator->Print(); | ||
| 75 | + iterator=iterator->next; | ||
| 76 | +} | ||
| 77 | + | ||
| 78 | + | ||
| 79 | +} | ||
| 80 | + | ||
| 81 | + | ||
| 82 | + |
examples10/privinh.cpp
0 → 100644
| 1 | +class A | ||
| 2 | +{ | ||
| 3 | + public: | ||
| 4 | + int a; | ||
| 5 | +}; | ||
| 6 | + | ||
| 7 | +class B: public A | ||
| 8 | +{ | ||
| 9 | + public: | ||
| 10 | + int b; | ||
| 11 | +}; | ||
| 12 | + | ||
| 13 | +class C: private A | ||
| 14 | +{ | ||
| 15 | + public: | ||
| 16 | + int c; | ||
| 17 | + void fun() | ||
| 18 | + { | ||
| 19 | + a = 15; | ||
| 20 | + }; | ||
| 21 | +}; | ||
| 22 | + | ||
| 23 | +int main() | ||
| 24 | +{ | ||
| 25 | + A a; | ||
| 26 | + B b; | ||
| 27 | + C c; | ||
| 28 | + | ||
| 29 | + a.a = 17; | ||
| 30 | + b.a = 17; | ||
| 31 | + //c.a = 17; | ||
| 32 | + | ||
| 33 | + A* aptr = &b; | ||
| 34 | + A* aptr2 = &c; | ||
| 35 | + aptr2->a = 17; | ||
| 36 | + | ||
| 37 | +} |
examples10/ptrconv.cpp
0 → 100644
examples10/ptrconv2.cpp
0 → 100644
| 1 | +class A { | ||
| 2 | +public: | ||
| 3 | + int a; | ||
| 4 | +}; | ||
| 5 | + | ||
| 6 | +class B : virtual public A { | ||
| 7 | + int b; | ||
| 8 | +}; | ||
| 9 | + | ||
| 10 | +class C : virtual public A { | ||
| 11 | + int c; | ||
| 12 | +}; | ||
| 13 | + | ||
| 14 | +class D: public B, public C | ||
| 15 | +{ | ||
| 16 | + int d; | ||
| 17 | +}; | ||
| 18 | + | ||
| 19 | +class E: public C, public B | ||
| 20 | +{ | ||
| 21 | + int e; | ||
| 22 | +}; | ||
| 23 | + | ||
| 24 | +int main() | ||
| 25 | +{ | ||
| 26 | + D d; | ||
| 27 | + E e; | ||
| 28 | + | ||
| 29 | + C* cptr1 = &d; | ||
| 30 | + C* cptr2 = &e; | ||
| 31 | + | ||
| 32 | + cptr1->a = 1; | ||
| 33 | + cptr2->a = 2; | ||
| 34 | + | ||
| 35 | +} | ||
| 36 | + |
examples10/storable.cpp
0 → 100644
| 1 | +#include <iostream> | ||
| 2 | + | ||
| 3 | +class Storable { | ||
| 4 | +public: | ||
| 5 | +Storable() {}; | ||
| 6 | +virtual void write() {}; | ||
| 7 | +virtual ~Storable() {write() ; } // to be called | ||
| 8 | +// from overriding destructors | ||
| 9 | +}; | ||
| 10 | + | ||
| 11 | +class Data : public Storable | ||
| 12 | +{ | ||
| 13 | + public: | ||
| 14 | + int* data; | ||
| 15 | + Data() { data = new int(32); }; | ||
| 16 | + ~Data() { delete data; }; | ||
| 17 | + void write() override { std::cout << *(this->data) << std::endl;}; | ||
| 18 | +}; | ||
| 19 | + | ||
| 20 | +int main() | ||
| 21 | +{ | ||
| 22 | + Data d; | ||
| 23 | + Storable* ptr = &d; | ||
| 24 | + ptr->write(); | ||
| 25 | +} |