-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBridge.cpp
More file actions
70 lines (64 loc) · 1.51 KB
/
Bridge.cpp
File metadata and controls
70 lines (64 loc) · 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//
// Created by osher on 13/02/2022.
//
#include <iostream>
using namespace std;
class HouseImplementor {
public:
virtual void printImplementation()=0;
};
class WoodHouse : public HouseImplementor {
void printImplementation() override {
cout << "wood house" << endl;
}
};
class BrickHouse : public HouseImplementor {
void printImplementation() override {
cout << "brick house" << endl;
}
};
class House {
protected:
HouseImplementor* _houseImplementor;
public:
House(HouseImplementor* houseImplementor) {
_houseImplementor = houseImplementor;
}
virtual void print()=0;
virtual ~House() {
cout << "delete" << "House" << endl;
delete _houseImplementor;
}
};
class BigHouse : public House {
public:
BigHouse(HouseImplementor* houseImplementor) : House(houseImplementor) {
}
void print() override {
cout << "big ";
_houseImplementor->printImplementation();
}
~BigHouse() {
cout << "delete" << "BigHouse" << endl;
}
};
class SmallHouse : public House {
public:
SmallHouse(HouseImplementor* houseImplementor) : House(houseImplementor) {
}
void print() override {
cout << "small ";
_houseImplementor->printImplementation();
}
~SmallHouse() {
cout << "delete" << "SmallHouse" << endl;
}
};
int main() {
House* h1 = new BigHouse(new WoodHouse());
h1->print();
House* h2 = new SmallHouse(new BrickHouse());
h2->print();
delete h1;
delete h2;
}