游记(5)

《effective C++》及《c++ 数据结构与算法》第一章小得,消除了以前的一些困惑。

0 将C++ 视作一个语言城邦,这个城邦支持的公民有:0、C 1、OO (c with class) 2 、template 3、STL,我以前学习和接触最多的是 C和 class,模板和 STL 需要自己去夯实一下。

1 继承中,子类可以继承保护和公有成员,但是不代表子类对象可以直接调用,

2 函数对象 operator () :包含函数调用运算符定义的对象称为函数对象,以前自己写得 less_than.. 就是在做这件事情,不过那个例子是为了说明 lambda 的用法,函数的参数是 函数对对象,在定义构造函数的时候,也可以将构造函数传入作为实参。STL 特别依赖于函数对象。

class func  {
public:
func()  {}
double operator( )  (double x)   {
  return 2 * x; 
 }
};

double sum ( func fc,int a, int b)  {
   double  sum = 0;   
   for ( int i = a ; i  <= b ; i++ ) 
   sum += fc(i);
   return sum;
}   


//call sum as follow
int main ()  {
int a = 1;
int b = 12;
func f;

double r0 = sum ( f,  a , b);
double r1 = sum ( func(), a , b);

cout << "R by function obj " << r0 << endl;
cout << " R by constructor " << r1<<  endl;


}

  对上述代码做了精简:

#include <iostream>
using namespace std;

class func {
public:
    func() {
    }
    double operator( )  (double x) {
        return 2 * x;
    }
};

int main() {
    func f;
    double a = f(4);
    double b = f.operator()(4);

    cout << "f(4) == " << a << endl;
    cout << "f.operator()(4) == " << b << endl;



}

运行结果:

f(4) == 8
f.operator()(4) == 8

  

s

原文地址:https://www.cnblogs.com/hanxinle/p/8012784.html