Browse Source

polymorfizm

m513t20 11 months ago
parent
commit
3a1d00734e
2 changed files with 38 additions and 7 deletions
  1. 3 2
      geometry/Triangle.h
  2. 35 5
      geometry/figures.cpp

+ 3 - 2
geometry/Triangle.h

@@ -11,9 +11,10 @@ private:
 	
 public:
 	template <class value_class> Triangle(value_class A, value_class B, value_class C);
+	template <>  Triangle(Point  A, Point  B, Point  C);
 	template <class value_class> Triangle(value_class x1, value_class y1, value_class x2, value_class y2, value_class x3, value_class y3 );
 	Triangle();
-	template <>  Triangle(Point  A, Point  B, Point  C);
+
 
 	double calc_area();
 	double calc_perimeter();
@@ -49,7 +50,7 @@ inline Triangle::Triangle(value_class x1, value_class y1, value_class x2, value_
 }
 
 template <>
-Triangle::Triangle(Point A, Point B, Point C)
+inline Triangle::Triangle(Point A, Point B, Point C)
 {
 	dots.push_back(A);
 	dots.push_back(B);

+ 35 - 5
geometry/figures.cpp

@@ -15,14 +15,16 @@ void chck_rectangle();
 void chck_polygon();
 void chck_circle();
 void chck_elipse();
+void chck_polimorph();
 
 int main()
 {
-    chck_trinagle();
-    chck_rectangle();
-    chck_polygon();
-    chck_circle();
-    chck_elipse();
+    //chck_trinagle();
+    //chck_rectangle();
+    //chck_polygon();
+    //chck_circle();
+    //chck_elipse();
+    chck_polimorph();
 
 }
 
@@ -61,6 +63,7 @@ void chck_polygon()
     A.push_back(5);
     Polygon p;
     p = Polygon(A);
+    p.name();
     cout << p.calc_area() << "\t" << p.calc_perimeter() << endl;
 
 }
@@ -93,3 +96,30 @@ void chck_elipse()
     cout << "el2 \t" << el2.calc_area() << '\t' << el2.calc_perimeter() << endl;
 
 }
+
+void chck_polimorph()
+{
+    vector <Geometry_figure*> figures;
+    figures.push_back(new Triangle(3, 4, 5));
+    figures.push_back(new circle(0, 0, 5));
+    figures.push_back(new Rectangle(2, 5));
+    figures.push_back(new elipse(0, 0, 4, 5));
+    vector <int> A;
+    A.push_back(0);
+    A.push_back(0);
+    A.push_back(5);
+    A.push_back(0);
+    A.push_back(5);
+    A.push_back(5);
+    A.push_back(0);
+    A.push_back(5);
+    figures.push_back(new Polygon(A));
+    
+    for (int i = 0; i < figures.size(); i++) {
+        figures[i]->name();
+        cout << "P=" << figures[i]->calc_area() << "\t S=" << figures[i]->calc_perimeter() << endl;
+    }
+
+
+
+}