编程求圆和长方形的面积.cpp

《C++STL基础及应用》

#include 
#include
#include
#include
using namespace std;
/*
函数适配器
一 绑定,用于将二元函数降为一元函数
	bindlst()
	template
	binder1st
	bindlist(const Pred &pr,const T&x)
	Pred是二元函数
	二元函数对象第一个参数绑定为x
	返回值相当于bindr1st
	(pr,Pred::first_argument_type(x))

	bind2nd()
	template
	binder2nd
	bind2nd(const Pred& pr,const T &y)
	Pred是二元函数
	二元函数对象第二个参数绑定为y
	返回值相当于bindr2nd
	(pr,Pred::second_argument_type(y))
二 取反
	not1
	template
	unary _negatenot1(const pred &pr)
	Pred是一元函数
	返回值相当于unary_negate(pr)

	not2
	template
	unary _negatenot2(const pred &pr)
	Pred是二元函数
	返回值相当于binary_negate(pr)
三 成员函数适配器
	men_fun
	template
	mem_fun_tmen_fun(R (T::*pm)())
	调用类T中的成员函数

	mem_fun_ref
	templat
	mem_fun_ref_tmem_fun_ref(R(T:: *PM)()) ;
	调用类T中的成员函数
四普通函数适配器
	ptr_fun

	把全局函数进一步封装成一元函数
    template
	pointer_to_unary_function
	ptr_fun(Result (*pf)(Arg));

    把全局函数进一步封装成二元函数
    template
	pointer_to_binary_funtion
	ptr_fun(Result(*pf)(Arg1,Arg2));
*/
//编程求圆和长方形的面积
//virtual 函数或方法可以被子类继承和覆盖
class Shape
{
     
public :
    virtual bool ShowArea()=0;
};
class Circle:public Shape
{
     
    float r;
public:
    Circle(float r):r(r){
     };
    bool ShowArea(){
     
        cout<<3.14f*r*r<<endl;
        return true;
    }
};
class Rectangle:public Shape
{
     
    float width,height;
public:
    Rectangle(float width,float height):width(width),height(height){
     }
    bool ShowArea(){
     
        cout<<width*height<<endl;
        return true;
    }
};
//各种形状的指针集合类(类的指针集合)
class AreaCollect
{
     
    vector<Shape *>v;
public:
    bool Add(Shape *pShape)
    {
     
        v.push_back(pShape);
        return true;
    }
    bool ShowEachArea()
    {
     
        for_each(v.begin(),v.end(),mem_fun(&Shape::ShowArea));
        return true;
    }
};
int main()
{
     
   AreaCollect contain;
   Shape * obj1=new Circle(10);
   Shape * obj2=new Rectangle(10,10);
   contain.Add(obj1);
   contain.Add(obj2);
   contain.ShowEachArea();
}

你可能感兴趣的:(STL学习,#,函数对象,c++)