C++进阶知识点(3)类的静态成员 字符和数字的互转 lambda

1.可以将一个类声明为一个字面值常量类,这样这个类就是一个字面值类型。但是声明这样的类要求比较多,用得也比较少,需要的时候自己网上查阅。

 

2.可以使用static关键字定义将类的成员变量和函数定义为静态的。静态成员与类直接相关而不是与每个类的对象相关联。

静态成员变量:

(1)类的静态成员变量不在类内进行初始化(有很少的特例是可以的,可以忽略)。

(2)对类内的静态变量初始化赋值的方式:

struct Person{

  string Name;

  static int Age;

}

int Person::Age = 10;//使用::获取类的静态变量赋值,注意这个赋值语句要放在全局,不能在main函数体或者其他函数体中使用。

(3)类的静态成员变量也可以使用public和private修饰

访问静态成员变量的时候如果是public的则可以使用Person::Age的方式,也可以使用对象:Person p;p.Age;。如果是private的则前面两种访问的方式都不可行,只能在类的成员函数中使用。

即使用Person实例化了多个不同的对象,但是他们访问到的静态成员变量都是同一个。

(4)普通成员函数和静态成员函数都可以直接访问到该类的静态成员变量

静态成员函数:

(1)对类内的静态函数初始化的方式,可以在类内初始化也可以在类外初始化,在类外初始化的时候不需要再加上static关键字
struct Person{ 

  string Name;

  static int Age;

  ststic int getAge(){

    return Age;

  }

  static int getAge1();

}

int Person::getAge1(){

  return Age;

}

(2)静态成员函数中只能访问该类中的静态成员变量和静态成员函数,不能使用this,访问不到普通成员

(3)静态成员函数也可以声明为private的,声明为private后就只有类中的静态成员函数可以访问

(4)使用静态成员函数的时候,可以使用Person::getAge()调用,也可以使用对象:Person p;p.getAge()调用

 

3.两个容器使用<、<=、>、>=、==、!=的比较规则

在使用以上的关系运算符时必须保证运算符两边是相同类型的容器,并且容器中包含的元素类型也要是相同的。

比较两个容器的大小的时候其实是将容器中的元素逐个进行比较,所以必须要求容器中的元素支持所使用的关系运算符。

 

4.string和数值之间的转化

to_string()将数值类型转化为string类型。stoi()将string类型转化为int类型。stof()将string类型转化为float类型。stod()将string类型转化为double类型

 

5.lambda表达式的形式:[捕获列表](参数列表)->返回类型{函数体}

捕获列表中可以写上局部变量,被捕获的局部变量在函数体中就可以直接使用。如果没有写在捕获列表中直接使用外面定义的局部变量会报错。

返回类型可以省略,如果没有写返回类型则机器会根据你的return语句自动判断返回类型,没有return语句则返回类型为void

如果不需要传入参数则参数列表也可以省略,也可以传入一个空的参数列表

捕获列表和函数体不能省略,即使你不捕获任何的局部变量,也要写上[]

函数:

int add(int x,int y){return x+y;}等价于[](int x,int y)->int{return x+y;}

甚至可以直接待lambda表达式后面加上()来直接调用,就像调用函数那些。如:int sum = [](int x,int y)->int{return x+y;}(5,6);

posted @ 2021-03-10 16:15  maycpou  阅读(137)  评论(0编辑  收藏  举报