zoukankan      html  css  js  c++  java
  • C/C++ 零碎知识点

    传递参数的一般指导原则:

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

    • 如果数据对象很小,比如内置类型或者小型结构,按值传递。
    • 如果数据对象是数组,只能使用指针,并将指针生命为指向const的指针。
    • 如果数据对象是较大的结构,则使用const指针或者const引用,以提高程序效率。这样可节省复制结构所需的时间与空间。
    • 如果数据对象是类对象,则使用const引用。类设计的语义要求使用引用,传递类对象的标准方式是按引用传递。

    对于修改调用函数中数据的函数:

    • 如果数据对象是内置类型,使用指针。
    • 如果数据对象是数组,只能使用指针。
    • 如果数据对象是结构,使用引用或者指针
    • 如果数据对象是类对象,使用引用。

    this指针:

    this指针指向用来调用成员函数的对象(this被作为隐藏参数传递给方法)。每个成员函数(包括构造函数和析构函数)都有一个this指针,this指向调用对象,如果方法需要引用整个调用对象,则可以使用表达式 *this。 this指向的是对象的地址,对象本身则是*this。

    局部返回值问题:

    在C++ Prier Plus中有这样一段代码(P382~383)

    Time Time::Sum(const Time & t) const
    {    
        Time sum;
        sum.minutes = minutes + t.minutes;
        sum.hours = hours + t.hours + sum.minutes / 60;
        sum.minutes %= 60;
        return sum;      
    }    

    参数是引用,返回值类型不是引用。将参数声明为引用是为了提高效率,减少内存使用。

    返回值不能是引用,应为函数创建了一个新的Time对象sum,来表示另外两个Time对象的和,返回对象将创建对象的副本,而调用函数可以使用它。然而若是返回类型为Time& ,则引用的将是sum对象。但显然,sum是局部变量,函数结束内存释放,引用将指向一个不存在的对象。使用返回类型Time意味着程序将在删除sum之前构造它的拷贝,调用函数将得到该份拷贝。

    注:上边提到了复制,复制肯定占内存以及影响性能。其实还可以在声明 Time sum 加上static,即

    static Time sum; //存疑

     复制构造函数的介绍:

    http://blog.csdn.net/lwbeyond/article/details/6202256/ 

    如果类中包含了使用new初始化的指针成员,应当定义一个复制构造函数,以复制指向的数据,而不是指针,这被称为深度复制。

    静态成员函数:

    静态成员函数是不能通过对象调用的,实际上,静态成员函数不能调用this指针,因其不与特定对象关联。如果静态成员函数在共有部分声明,则可以使用类名和作用域解析运算符来调用它。另外,静态成员函数只能调用静态数据成员。

    在构造函数中使用new时应注意的事项:

    • 如果在构造函数中使用了new来初始化指针成员,则应在析构函数中使用delete
    • new与delete相互兼容,new对应于delete,new[] 对应于 delete[]
    • 如果有多个构造函数,则必须以相同的方式使用new,要么都带中括号,要么都不带。因为只有一个析构函数,所有构造函数都需与其兼容。
    • 应定义一个复制构造函数, 通过深度复制将一个对象初始化为另一个对象.具体而言,复制构造函数应复制数据,而不是地址。
    • 应定义一个赋值运算符,通过深度复制将一个对象复制给另一个对象。

    (以上,参见C++ Primer Plus  Page 447 左右)

  • 相关阅读:
    USB小白学习之路(6) IIC EEPROM读取解析
    USB小白学习之路(5) HID鼠标程序
    USB小白学习之路(4)HID键盘程序
    USB小白学习之路(3) 通过自定义请求存取外部RAM
    USB小白学习之路(2)端点IN/OUT互换
    USB小白学习之路(1) Cypress固件架构解析
    LeetCode -- 14 最长公共前缀
    初识docker——对docker的理解
    洛谷 P5461 赦兔战俘
    知识碎片 —— 数组 与 伪数组
  • 原文地址:https://www.cnblogs.com/gardenofhu/p/6861339.html
Copyright © 2011-2022 走看看