00
01 class Counter
02 {
03 protected:
04 int counter;
05
06 public:
07 Counter(int cnt): counter{cnt} {}
08 virtual void operator() (int i) = 0;};
11
12 class AdvancedCounter: public Counter
13 {
14 public:
15 AdvancedCounter(int cnt): Counter{cnt} {}
16
17 void operator() (int increment) override
18 { counter += increment; }
19 };
20
21 void IncreaseCounter(Counter* c)
22 {
23
24 if (auto ac = dynamic_cast<AdvancedCounter*>(c))
25 {
26 (*ac)(10);
27 }}
31
32 int main ()
33 {
34 AdvancedCounter a{1};
35
36 IncreaseCounter(&a);
37
38 return 0;
39 }
40