zoukankan      html  css  js  c++  java
  • C++类编程(一)const的使用

      设计类时,考虑以下五点

      1、构造函数初始化列表

      2、函数该不该加const

      3、参数传递尽量考虑用引用传递,考虑加不加const

      4、返回用不用引用

      5、数据尽量放在private,函数尽量放在public

      一、构造函数

       ①构造函数参数名不能与类成员名相同

       ②只有当没有定义能和构造函数时,编译器才提供默认构造函数

       ③两种定义默认构造函数的形式 

         1、给已有构造函数的所有参数提供默认值.Stock(const string & co="Error",int n=0,double d=0.0);

         2、通过函数重载,定义一个没有参数的构造函数。Stock();

       ④成员初始化参数列表。

        Classy::Classy(int n,int m) : mem1(n),men2(0),men3(n*m+2)

               {

                   //........

               }  

         1、其只能用于构造函数            

         2、对非静态const数据成员,必须用器来初始化

         3、对引用数据成员,必须用器来初始化

         4、成员初始化的顺序与其在类声明中出现的顺序相同,与初始化器中的排列顺序无关

         ⑤析构函数

            程序必须有一个析构函数,如果没有,编译器将默认的生成一个析构函数。当在构造函数中使用了new来分配内存时,必须使用delete来释放内存。

      二、参数引用

        引用变量的主要用途是将引用变量用作形参,使函数可以使用原始数据。引用是已定义变量的别名,与变量指向相同的值和内存单元。单独使用引用变量,在声明引用时必须将其初始化,而不是像指针那样,先声明后赋值。下面程序将看到传递引用时,函数将使用原始数据,改变引用将改变原始数据,与已往的按值传递不同。

    #include<iostream>
    
    void swapr(int & a,int & b);
    
    int main()
    {
        using namespace std;
        int m=3,n=9;
    
        swapr(m,n);
        cout << "m " << m << " n " << n << endl;
        
    
        
        return 0;
    }
    
    void swapr(int & a,int & b)
    {
        using namespace std;
        int temp;
        temp=a;
        a=b;
        b=temp;
        cout << "a " << a << " b " << b << endl;
    }

       结果如下

             原始数据和形参的值都发生了交换。

     由于改变引用的值,会同时修改原始变量,为了然函数使用传递的信息,而不对这些信息进行修改,同事用像使用引用,则可以使用常量引用,相比于普通变量,const变量属于不可修改的左值。

          将引用参数声明为const引用有三个好处:

           ①使用const引用可以避免无意中修改数据的编程错误;

           ②使用const引用是函数能够处理const和非const实参,否则只能接受非const实参;

           ③使用const引用可以使函数能够正确的生成并使用临时变量。

    函数参数使用引用、指针和按值传递的选择

    对于使用传递的值而不作修改的函数

    1、如果数据对象很小,如内置的数据类型或小型结构,则按值传递
    2、如果数据对象是数组,则使用指针(唯一选择),并将指针声明为指向const的指针
    3、如果数据对象是较大的结构,则使用const指针或const引用,提高效率
    4、如果数据对象是类对象,则使用const引用

    对于修改函数中数据的函数

    1、如果数据对象很小,如内置的数据类型或小型结构,则使用指针
    2、如果数据对象是数组,则使用指针(唯一选择)
    3、如果数据对象是较大的结构,则使用指针或引用
    4、如果数据对象是类对象,则使用引用

    三、返回引用

         返回引用可以提高效率。返回引用要注意的问题:避免返回函数终止时不存在的内存单元的引用(如在函数中生命的临时变量)。可以返回作为参数传递给函数的引用,也可以使用new分配新的存储空间,但要使用delete删除存储空间。

         一般如果函数要返回局部对象的话,应该返回对象,而不是引用,如果函数返回一个没用公有复制构造函数的类的对象,这必须返回对象的引用。如果返回的对象需要修改,则返回非const引用,如果不修改,则返回const引用。

    四、函数加const

         只要类方法不修改调用对象,就应该将其声明为const。

     
  • 相关阅读:
    Html5实现iPhone开机界面
    Html5游戏开发-145行代码完成一个RPG小Demo
    HTML5开源RPG游戏引擎lufylegendRPG 1.0.0发布
    如何制作一款HTML5 RPG游戏引擎——第五篇,人物&人物特效
    如何制作一款HTML5 RPG游戏引擎——第四篇,情景对话
    如何制作一款HTML5 RPG游戏引擎——第三篇,利用幕布切换场景
    html5游戏开发-零基础开发《圣诞老人送礼物》小游戏
    如何制作一款HTML5 RPG游戏引擎——第二篇,烟雨+飞雪效果
    如何制作一款HTML5 RPG游戏引擎——第一篇,地图类的实现
    读CopyOnWriteArrayList有感
  • 原文地址:https://www.cnblogs.com/wujing-hubei/p/5160967.html
Copyright © 2011-2022 走看看