lambda
在python中应用没有;进行代码范围约束,使用 lambda 只能写一行,功能有限,而在c++中可以通过;进行代码范围约束,可以有多行,
[](int a ,int b)->int{return a + b ;}
->int 也将可以不写,自动推导返回值,
[] 是捕获列表, 如果在匿名函数中使用到其他外部的变量就需要用到捕获列表了
[a] 表示值传递方式捕获变量 a
[=] 表示值传递方式捕获所有父作用域的变量(包括this)
[&a] 表示引用方式传递捕获变量a
[&] 表示引用传递方式捕获所有父作用域的变量(包括this)
[this] 表示值传递方式捕获当前的this指针
[=,&a,&b] 引用方式捕获 a 和 b , 值传递方式捕获其他所有变量 (这是组合写法)
() 是接收的参数,当匿名函数不是自调用的时候可以只写类型,不需要在()中写变量名
{} 在c++中是代码块,标记着匿名函数的代码
继承
在面向对象语言中,继承意味着代码复用,A类继承B类意味着在B类中也可以使用A类中的方法或函数
如:
//父类
class A{
public:
int a = 10;
};
// 子类
class B: public A{
};
父类有参构造
当继承的时候,父类中的类是有参构造的话就需要在子类的构造中先调用父类的有参构造
class Person{
private :
int age ;
string name ;
public :
Person(int age , string name){
cout << "调用了父类构造函数" << endl;
this->age = age ;
this->name = name;
}
};
class Student: public Person{
public :
Student(int age , string name):Person(age ,name){
cout << "调用了子类类构造函数" << endl;
}
};
可以在子类中的参数化列表中调用父类中的有参构造,这样就完成了父类先初始化