《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