zoukankan      html  css  js  c++  java
  • C++(三十二) — 常对象、常成员变量、常成员函数

      常量:对于既需要共享、又需要防止改变的数据。在程序运行期间不可改变。

      const 修饰的是对象中的 this 指针。所以不能被修改。

      this指针存在于类的成员函数中,指向被调用函数所在的类实例的地址。

    1、常对象

       数据成员值在对象的整个生存期内不能改变。在定义时必须初始化,而且不能被更新。

       常对象,只能调用常成员函数,保证常对象的数据成员不被改变。

    class point
    {
    public:
        point(int i, int j)
        {
            x = i, y = j;
        }
    private:
        int x, y;
    };
    // 定义常对象
    point const a(3, 4); // 定义时,初始化

    2、常成员变量

         常数据成员,一经初始化就不可改变。构造函数对其进行初始化,只能通过初始化列表。

      通常把常数据成员定义为静态成员,使其成为类的一个常量。

         初始化实例:

    class circle
    {
    public:
        circle(int r, int i);
        void print();
    private:
        int ri;
        const int a;
        static const float pi; //静态常数据成员
    };
    // //静态常数据成员,类外初始化
    const float circle::pi = 3.14;
    // 常数据成员只能通过初始化列表,获得初值
    // a 为常成员数据,不能把 a=i 写到构造函数体内,必须通过初始化列表获取初值
    // 普通成员也可在初始化列表中赋值
    circle::circle(int r, int i) :a(i), ri(r)
    {
    }
    
    void circle::print() 
    {
        cout << ri << endl;
    }
    void main()
    {
        circle x(100, 0);
        x.print();
        system("pause");
        return;
    }

    3、常成员函数

    const修饰常成员函数,写在什么位置没有关系。

    修饰的是this 指针所指向的内存空间,不可以改变。

    void OpVar(int a, int b) const
    {
        a = 100;
        this->b = 200;// 会报错,不可更改
    
    }
    class R
    {
    public:
        R(int ra, int rb)
        {
            r1 = ra; r2 = rb;
        }
        void change(int, int);
        void print() const; // 定义常成员函数
    private:
        int r1, r2;
    };
    
    void R::change(int a, int b)
    {
        r1 = a; r2 = b;
    }
    void R::print() const
    {
        cout << r1 << ", " << r2 << endl;
    }
    void main()
    {
        R a(5, 4);
        a.print(); // 调用常成员函数 print()
        // 定义常对象,不可调用普通函数 change()
        const R b(20, 25);
        b.print();// 调用常成员函数 print()
        system("pause");
        return;
    }
  • 相关阅读:
    Wijmo 更优美的jQuery UI部件集:从wijwizard和wijpager开始
    设计规范基础
    libgdx的tmx地图处理工具gdxtiledpreprocessor.jar(TiledMapPacker)修正版
    Zookeeper简介
    翻译:Contoso 大学 6 – 更新关联数据
    jquery 插件ztree的应用简单的树(tree)
    使用EF构建企业级应用
    可复用的WPF或者Silverlight应用程序和组件设计(1)——应用程序级别
    Castor简单介绍
    Eclipse各种书籍资料整理包括书籍介绍和下载
  • 原文地址:https://www.cnblogs.com/eilearn/p/10218454.html
Copyright © 2011-2022 走看看