C++ const

  1. const用法分类

    1.1常变量:  const 类型说明符 变量名
    1.2 常引用:  const 类型说明符 &引用名
    1.3 常对象:  类名 const 对象名(实参)  /   const 类名 对象名(实参)
    1.4 常成员函数:  类名::fun(形参) const
    1.5 常数组:  类型说明符 const 数组名[大小]    
    1.6 常指针:  const 类型说明符* 指针名 ,类型说明符* const 指针名
    1.7 常函数参数:  void Fun( const A *in); //修饰指针型传入参数
                        void Fun(const A &in); //修饰引用型传入参数
    1.8 常函数返回值 const 类名:fun(形参)
  2. 常成员变量

    常成员变量与普通常变量申明类似,区别是常成员变量只能在构造方法参数初始化列表初始化。

    const int a =10 等价于 int const a = 10: 指定a是一个常变量
    const int *a=&b const修饰的是 *a,故这里表示指针指向的内容*a不能变(不能给*a赋值),但是指针a是可以变的(可以给a赋值为别的地址)。
    int const *a=&b 与上面的功能相同
    int * const a = &b: const修饰的是指针a,也就是这里定义了一个常指针,指针本身的值不可以
        改变(不可以给指针赋值为别的地址),但是指向的内容*a可以改变(可以给*a赋值别的数据)。
    const int * const a = &b 指向常数据的常指针,既不可以给*a赋值,也不可以给a赋值。
    const int &a=100     常数引用,即不能改变引用的值。
  3. const成员函数:用于类数据保护

    const成员函数主要用于数据保护,保护类中对象不被修改,可以使用类中所有成员变量,但是不可以修改成员变量的值。常成员函数需要在声明和定义的时候在函数头部的结尾加上 const 关键字

    class Test
    {
    public:
        char *name;
        char *getName() const; 
    }
    
    //防止外部修改name的值,故定义为const,只为获取值。
    char* Test::getName() const
    {
        return name;
    }
  4. const对象

    const对象必须被初始化。
    若是new初始化,new返回的指针必须是const类型的
    const对象只能访问const成员函数,而非const对象可以访问任意的成员函数;
    const对象的成员是不能修改的,而通过指针维护的对象却可以修改的;

    class Test
    {
    public:
        string name;
        Test(string name);
        string getName() const;
        void setName(string name);
        void setName(string name) const;    //此方法为上一方法的重载
    };
    
    string Test::getName() const
    {
        return name;
    }
    
    Test::Test(string name){
        this->name = name;
    }
    
    void Test::setName(string name){
        this->name = name;
    }
    
    void setName(string name) const
    {
        this->name = name;//报错,未定义的=:常成员函数不能修改成员变量。
    }
    
    int main()
    {
        using namespace std;
        const Test test("xiaoM");
        cout<<test.getName()<<endl;
        //test.setName("aaa"); //编译错误:常成员对象无法调用非常成员函数
    }
  5. 常函数参数:避免函数修改传递过来的对象。

    void func(const int a); 做为参数使用,说明函数体内是不能修改该参数的;
    对不同参数定义时不同的形式,可参见定义变量时使用方式

    同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。
    函数参数中const 指针,表示不允许将该指针指向其他内容。

  6. 常函数返回值

    可以阻止用户修改返回值。返回值也要相应的赋值给一个常量或常指针。

  7. 常指针有两种类型:

    const 类型说明符* 指针名 等同于 类型说明符 const* 指针名:指针名不能指向别的内存地址,但可以修改其指向的内存地址的内容。

    类型说明符* const 指针名*指针名 的内容不可以改变,但指针名可以指向别的字符串

  8. 使用

    定义const常量
    方便编译器进行类型检查
    保护被修饰的内容,避免意外修改
    节省空间
    提高效率
  9. mutable

    mutable也是为了突破const的限制而设置的,只能修饰类的非静态数据成员.

    使用场景:

    需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值