You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.5 KiB
74 lines
1.5 KiB
/*
|
|
* Copyright (c) 2016 - present Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
class Polygon {
|
|
protected:
|
|
int width, height;
|
|
|
|
public:
|
|
virtual ~Polygon();
|
|
void set_values(int a, int b) {
|
|
width = a;
|
|
height = b;
|
|
}
|
|
virtual int area() { return 0; }
|
|
};
|
|
|
|
class Rectangle : public Polygon {
|
|
public:
|
|
~Rectangle();
|
|
int area() { return width * height; }
|
|
};
|
|
|
|
class Triangle : public Polygon {
|
|
public:
|
|
~Triangle(){};
|
|
int area() {
|
|
int x = width * height;
|
|
return x - 10;
|
|
}
|
|
};
|
|
|
|
int rect_area() {
|
|
Rectangle rect;
|
|
Polygon* ppoly1 = ▭
|
|
ppoly1->set_values(4, 5);
|
|
return 1 / (ppoly1->area() - 20);
|
|
}
|
|
|
|
int tri_area() {
|
|
Triangle trgl;
|
|
Polygon poly;
|
|
Polygon* ppoly2 = &trgl;
|
|
ppoly2->set_values(4, 5);
|
|
return 1 / (ppoly2->area() - 10);
|
|
}
|
|
|
|
int poly_area() {
|
|
Polygon poly;
|
|
Polygon* ppoly3 = &poly;
|
|
return 1 / ppoly3->area();
|
|
}
|
|
|
|
int tri_not_virtual_area() {
|
|
Triangle trgl;
|
|
Polygon poly;
|
|
Polygon* ppoly2 = &trgl;
|
|
ppoly2->set_values(4, 5);
|
|
return 1 / ppoly2->Polygon::area();
|
|
}
|
|
|
|
// dynamic dispatch in this case still doesn't work,
|
|
// one need special dealing with names for destructors.
|
|
// But the call gets the virtual flag.
|
|
void call_virtual_destructor() {
|
|
Polygon* trgl = new Triangle;
|
|
delete trgl;
|
|
}
|