基础:class 基础
C++中::和:的用法
- 单冒号:的用法
- 表示机构内位域的定义(即该变量占几个bit空间)
typedef struct _XXX{
unsigned char a:4;
unsigned char :4;
};
- 构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。
struct _XXX{
_XXX() : y(0xc0) {}
unsigned char c;
} ; XXX
- 类名冒号后面的是用来定义类的继承。
class 派生类名 : 继承方式 基类名
{
派生类的成员
};
继承方式:public、private和protected,默认处理是public
派生类:
继承与派生
派生类
继承方式:三种继承方式
- 双冒号::的用法
- 表示“域操作符”,用来表明类作用域或名称空间作用域
例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时, 就要写成void A::f(),表示这个f()函数是类A的成员函数
std::cout << “Hello World” << std::endl;表明使用std名称空间下的cout - 直接用在全局变量前,表示是全局变量
全局作用域符号:当全局变量在局部函数中与其中某个变量重名,那么就可以用::来区分如:
char zhou; //全局变量
void sleep()
{
char zhou; //局部变量
char(局部变量) = char(局部变量) *char(局部变量) ;
::char(全局变量) =::char(全局变量) *char(局部变量);
}
- 表示引用成员函数及变量,作用域成员运算符
作用域符号::的前面一般是类名称,后面一般是该类的成员名称,C++为例避免不同的类有名称相同的成员而采用作用域的方式进行区分
如:A,B表示两个类,在A,B中都有成员member。那么
A::member就表示类A中的成员member
B::member就表示类B中的成员member
每个类都会定义自己的作用域,一个类就是一个作用域
Typedef
std::map用法
std::vector
//向量专用,压栈的意思,但又有点区别,知道这个函数是每次把元素压到最后面就行了,
vector<int>v;
v.push_back(1);v.push_back(3);v.push_back(2);
=======>v[o]==1
=======>v[1]==3
=======>v[2]==2
using namespace std
C++中std是什么意思?
std–>standard标准 using namespace std告诉编辑器我们将要使用名字空间std中的函数或者对象
using的三种用法
New
->
nullptr
- 在函数重载中,宏替换NULL和整型0造成歧义 需要nullptr代表空指针而非整型0
- 关键字nullptr提高了程序的类型安全性和可读性,与NULL宏定义相比,具有更强的可靠性和扩展性。
- NULL是一个宏,替换的是0 ,而nullptr是关键字,代表空指针
- 含义不同,nullptr 代表是空指针,NULL 代表整型数字0
- nullptr可以清晰地表达代码的意图,能够避免在类型检查时出现一些歧义问题,nullptr只能用于指针类型,不能与整数类型混淆~
析构函数
explicit关键字详解
Friend Classes友元类
static_cast 强制类型转换
std::chrono库表示和处理时间
auto
&
& 符号表示引用(reference)
- 在C++中,& 符号表示引用(reference)。在函数参数列表中,如果一个参数被声明为引用类型,比如 const GrFlushInfo& info,那么它就是一个引用参数。
- 引用参数允许函数直接访问调用方提供的变量,而不是对变量进行复制。这样可以减少内存消耗,提高效率,并且允许函数修改调用方提供的变量。在这个例子中,const GrFlushInfo& info 表示一个常量引用,即函数可以通过这个引用访问 GrFlushInfo 类型的对象,但不能修改它。
& 表示取地址
在变量前添加 &
& 表示位与运算
数 & 数的运算
all_of、any_of、none_of算法
all_of: 都为真,才返回真
any_of:有一个为真,就返回真
none_of:都不为真,才返回真
Lambda表达式
#include <vector>
#include <iostream>
#include <algorithm>
#include <functional>
int main()
{
std::vector<int> c = { 1, 2, 3, 4, 5, 6, 7 };
int x = 5;
/*
std::remove_if:这是一个算法函数,用于从容器中移除满足特定条件的元素。
c.begin() 和 c.end():这两个函数返回容器 c 的起始和结束迭代器,表示要在整个容器范围内执行操作
std::remove_if 函数会将满足条件的元素移到容器的末尾,并返回一个指向第一个被移除元素的迭代器。然后,使用 c.erase 函数将这些元素从容器中擦除,保留不满足条件的元素
*/
c.erase(std::remove_if(c.begin(), c.end(), [x](int n) { return n < x; }), c.end());
std::cout << "c: ";
std::for_each(c.begin(), c.end(), [](int i) { std::cout << i << ' '; });
std::cout << '\n';
// 闭包的类型不能被指名,但可用 auto 提及
// C++14 起,lambda 能拥有自身的默认实参
auto func1 = [](int i = 6) { return i + 4; };
std::cout << "func1: " << func1() << '\n';
// 与所有可调用对象相同,闭包能可以被捕获到 std::function 之中
// (这可能带来不必要的开销)
std::function<int(int)> func2 = [](int i) { return i + 4; };
std::cout << "func2: " << func2(6) << '\n';
system("pause");
return 0;
}