#ifndef _SHAPE_H_ #define _SHAPE_H_ #include <iostream> using namespace std; class Shape{ public: virtual double area() const = 0; virtual double perimeter() const = 0; }; class Square; class Rectangle: public Shape{ private: double _length; double _width; public: friend Square; friend ostream& operator<<(ostream& out, const Rectangle& src); Rectangle(double len = 0, double wid = 0){ _length = len; _width = wid; } double get_len() const { return _length; } double get_wid() const { return _width; } void set_len(int len){ _length = len; } void set_wid(int wid){ _width = wid; } Rectangle(const Rectangle& src); virtual double area() const{ return _length * _width; } virtual double perimeter()const{ return 0; } void print(ostream& out) const { out<<"("<<_length<<", "<<_width<<")"; } }; class Square: public Rectangle { public: Square(double len) : Rectangle(len, len){ } Square(const Square& src) { set_len(src.get_len()); _length = src._length; } }; ostream& operator<<(ostream& out, const Rectangle& src) { //src.print(out); out<<"("<<src._length<<", "<<src._width<<")"; return out; } #endif
##############
#include "shape.h" #include <vector> class Compare_len { public: bool operator()(const Rectangle& src1, const Rectangle& src2){ return src1.get_len() > src2.get_len(); } }; class Compare_wid { public: bool operator()(const Rectangle& src1, const Rectangle& src2){ return src1.get_wid() > src2.get_wid(); } }; class Compare_area { public: bool operator()(const Rectangle& src1, const Rectangle& src2){ return src1.area() > src2.area(); } }; template<class Comparator> int bubble_sort(vector<Rectangle>& data, Comparator is_bigger) { int i = 0; int j = 0; int flag = 0; for(i = 0; i < data.size(); i++) { flag = 0; for(j = 0; j < data.size() - i - 1; j++) { if(is_bigger(data[j], data[j+1])) { swap(data[j], data[j+1]); flag = 1; } } if(flag == 0) break; } return 0; } Rectangle::Rectangle(const Rectangle& src){ _length = src._length; _width = src._width; } int main(){ Rectangle a1(1,4), a2(2,3), a3(2,2), a4(3, 1), a5(4,1); vector<Rectangle> vec; vec.push_back(a1); vec.push_back(a2); vec.push_back(a3); vec.push_back(a4); vec.push_back(a5); bubble_sort(vec, Compare_wid()); for(int i = 0; i < vec.size(); i++) { cout<<vec[i]<<endl; } return 0; }
Function object
最新推荐文章于 2023-05-25 20:10:13 发布