// compile with: g++ hello.cpp
#include<iostream>
#include<string>
#include<vector>
using namespace std;
// class is like struct... but
// - classes have methods - functions that run on the object
// - classes can make their data private
class myData {
private:
int x, y;
public:
myData(int n1, int n2) {
x = n1; y = n2;
}
myData() {
x = y = 0;
}
int getX() const {
return x;
}
void setX(int n) {
x = n;
}
int getY() const {
return y;
}
void setY(int n) {
y = n;
}
myData operator+(const myData ¶m) {
myData temp;
temp.x = x + param.x;
temp.y = y + param.y;
return temp;
}
myData& operator=(const myData ¶m) {
x = param.x;
y = param.y;
return *this;
}
myData *pointerToMe() {
return this;
}
};
ostream &operator<<(ostream &os, myData const &m) {
return os << "(" << m.getX() << ", " << m.getY() << ")";
}
int main(int argc, char * argv[]) {
cout << "x: "; int x; cin >> x;
cout << "y: "; int y; cin >> y;
myData m(x, y);
// note - we have overloaded the ostream<< operator for myData
// it gets run something like operator<<(cout, m);
cout << m << endl;
myData m2 = m + m;
cout << m2 << endl;
cout << "&m = " << &m << endl;
cout << "&m2 = " << &m2 << endl;
cout << "m.pointerToMe = " << m.pointerToMe() << endl;
cout << "m2.pointerToMe = " << m2.pointerToMe() << endl;
return 0;
}