forked from zhmzhen/candcppCode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcppPimpl.cpp
77 lines (60 loc) · 1.16 KB
/
cppPimpl.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
77
#include <iostream>
#include <string>
#include <typeinfo>
#include <cstdlib>
#include "userPimpl.h"
//Private implementation
//define the base Mutex
/* |IMPLEMENTATION| User.cpp file */
#include "User.h"
#include <iostream>
using namespace std;
struct User::Impl {
Impl(string name)
: name(move(name)){
cout << "Co User::Impl" << name << endl;
};
~Impl() {
cout << "~Co User::Impl" << name << endl;
};
void welcomeMessage()
{
cout << "Welcome, " << name << endl;
}
string name;
int salary = -1;
};
// Constructor connected with our Impl structure
User::User(string name)
: pimpl(new Impl(move(name)))
{
pimpl->welcomeMessage();
}
// Default Constructor
User::~User() = default;
// Assignment operator and Copy constructor
User::User(const User& other)
: pimpl(new Impl(*other.pimpl))
{
}
User& User::operator=(User rhs)
{
swap(pimpl, rhs.pimpl);
return *this;
}
// Getter and setter
int User::getSalary()
{
return pimpl->salary;
}
void User::setSalary(int salary)
{
pimpl->salary = salary;
cout << "Salary set to "
<< salary << endl;
}
int main() {
std::cout << "main: enter" << std::endl;
std::cout << "main: exit" << std::endl;
return 0;
}