Anonymous user
Polymorphism: Difference between revisions
→{{header|C++}}: includes added, pointers deleted
SqrtNegInf (talk | contribs) m (→{{header|Raku}}: .perl not needed) |
(→{{header|C++}}: includes added, pointers deleted) |
||
Line 604:
=={{header|C++}}==
<lang cpp>
#include <cstdlib>
protected:▼
class Point {
int x, y;
Point(int x0 = 0, int y0 = 0) : x(x0), y(y0) {}
Point(const Point
virtual ~Point() {}
const Point& operator=(const Point
if (this != &p) {
return *this;▼
}
int getX() { return x; }
int getY() { return y; }
virtual void print() { printf("Point\n"); }
};
class Circle
▲ private:
int r;
Circle(Point p, int r0 = 0) : Point(p), r(r0) {}
Circle(int x0 = 0, int y0 = 0, int r0 = 0) : Point(x0, y0), r(r0) {}
virtual ~Circle() {}
const Circle& operator=(const Circle
if (this != &c) {
}
int getR() { return r; }
virtual void print() { printf("Circle\n"); }
};
int main() {
Point *p = new Point();
Point *
delete p;
}</lang>
'''Pattern:''' [[CRTP|Curiously Recurring Template Pattern]]
<lang cpp>#include <cstdio>
<lang cpp>// CRTP: Curiously Recurring Template Pattern▼
#include <cstdlib>
template <typename Derived>
class PointShape
Line 677 ⟶ 681:
// compile-time virtual function
void print() const { reinterpret_cast<const Derived*>(this)->printType(); }
};
Line 695 ⟶ 699:
return *this;
}
void printType() const { printf("Point\n"); }
};
Line 704 ⟶ 708:
public:
Circle(int x0 = 0, int y0 = 0, int r0 = 0) : PointShape(x0, y0), r(r0) { }
Circle(Point p, int r0 = 0) : PointShape(p.
~Circle() {}
const Circle& operator=(const Circle& c)
Line 717 ⟶ 721:
}
int getR() { return r; }
void printType() const { printf("Circle\n"); }
};
int main()
{
PointShape<Point>* p = new Point();
p->print();
c->print();
delete p;
delete c;
return 0;
}</lang>
|