-
Notifications
You must be signed in to change notification settings - Fork 0
/
class_owning_class.cpp
76 lines (69 loc) · 1.45 KB
/
class_owning_class.cpp
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
71
72
73
74
75
76
#include <iostream>
#include <stdexcept>
#include <vector>
class AnotherClass {
public:
AnotherClass(int i)
{
i_ = i;
std::cout << "AnotherClass(" << i << ")\n";
}
~AnotherClass()
{
std::cout << "~AnotherClass(" << i_ << ")\n";
}
void DoSomething()
{
std::cout << "AnotherClass(" << i_ << ") DoSomething()\n";
if (i_ == 5)
throw std::runtime_error("Hey!");
}
void Print()
{
std::cout << "I'm " << i_ << "\n";
}
private:
int i_;
};
class MyClass {
public:
MyClass()
{
std::cout << "MyClass()\n";
for (int i = 0; i < 10; ++i) {
v.push_back(new AnotherClass(i));
}
}
~MyClass()
{
std::cout << "~MyClass()\n";
for (size_t i = 0; i < v.size(); ++i)
delete v[i];
}
void IterateAnotherClass(){
for (size_t i = 0; i<v.size(); ++i){
v[i]->DoSomething();
}
}
AnotherClass* getAnotherClass(int i){
return v[i];
}
private:
//using a vector of pointers can also use something that
//owns the objects
std::vector<AnotherClass*> v;
};
int main()
{
MyClass c;
try{
c.IterateAnotherClass();
}
catch(std::runtime_error& e){
std::cout << "Caught: " << e.what() << "\n";
}
//Everything is till in place and usable
AnotherClass* p = c.getAnotherClass(3);
p->DoSomething();
return 0;
}