120 likes | 460 Views
struct v.s. class. struct point { double x; double y; }; void main() { point p; double distance; p.x = 3.0; p.y = 4.0; distance = sqrt( p.x * p.x + p.y * p.y ); ....... }. class point { public: point(double x, double y); double xcoord();
E N D
structv.s.class struct point { double x; double y; }; void main() { point p; double distance; p.x = 3.0; p.y = 4.0; distance = sqrt(p.x*p.x+ p.y*p.y); ....... } class point { public: point(double x, double y); double xcoord(); double ycoord(); void setx(double x); void sety(double y); double from_org(); double disst(class point p); private: double myX; double myY; }; ............. void main() { point p1(3,4); double distance=p1.from_org(); ...... } p1.myX=3.0; Error!!!
Homework int main() { point p1(0,4); point p2(4,0); cout << p1.from_org() << endl; cout << p2.from_org() << endl; cout << p2.disst(p1) << endl; } Refer to the previous slide, change class point to struct point and have a program to do the same thing as above.
morestruct struct student { string last_name; string first_name; Ctime DOB; double GPA; int credits; char gender; int class; }; void main() { Student a,b; ............ a.class = b.class; a.credits += 9; a.last_name = "....."; ............ } A collection of information in different data types. Heterogeneous aggregate A user can (has to) update the values of the variables defined insider the struct(ure).
structasclass struct Point { Point(); Point(double px, double py); double distanceFrom(const Point& p) const; double x; double y; }; Point::Point(double px, double py) : x(px), y(py) {} Point::Point() : x(0), y(0) {} double Point::distanceFrom(const Point& p) const { return sqrt((x - p.x)*(x - p.x) + (y - p.y)*(y - p.y)); }
structis notclass struct Point { Point(); Point(double px, double py); double distanceFrom(const Point& p) const; double x; double y; }; void main() { Point P1(0,4); Point P2; cout << P1.distanceFrom(P2) << endl; P2.x=4; P2.y=0; cout << P1.distanceFrom(P2) << endl; }
Copy constructor; overloaded operator void main() { point p1(0,4); // class point p2(4,0); point p3; p3 = p2; if (p3 == p2) cout << "p2 == p3"; Point P1(0,4); // struct Point P2; Point P3; P3 = P2; if (P2 == P3) cout << "P2 == P3"; }
Easy way to output Points ..... void main() { .......... Point P1(0,4),P2; ........ cout << "(" << P1.x << "," << p1.y << ")"; ......... if ((P1.x == P2.x) && (P1.y == P2.y)) ... ......... } Can we simply use cout << P1 and have (0,4) printed? Can we simply use P1==P2 ?
Overload the standard operators include <sstream> struct Point { ..... string tostring() const; ..... }; string Point::tostring() const { ostringstream out; out << "(" << x << ", " << y << ")"; return out.str(); } ostream & operator << (ostream& os, const Point& p) { os << p.tostring(); return os; } bool operator == (const Point& p1, const Point& p2) { return p1.x == p2.x && p1.y == p2.y; }
What's wrong? class point { public: point(double x, double y); double xcoord(); double ycoord(); void setx(double x); void sety(double y); double from_org(); double disst(class point p); private: double myX; double myY; }; bool operator == (point& p1, point& p2) { return p1.x == p2.x && p1.y == p2.y; } bool operator == (point& p1, point& p2) { return p1.myX == p2.myX && p1.myY == p2.myY; } bool operator == (point& p1, point& p2) { return p1.xcoord() == p2.xcoord() && p1.ycoord() == p2.ycoord(); }