【高質量C++/C總結10】C++實踐細節總結10

說在開頭

這裏總結了我個人在編程過程中注意到的細節,在這裏進行總結。

作者:憨豆酒(YinDou),[email protected],熟悉圖形學,圖像處理領域,經常更新的學習總結倉庫:https://github.com/douysu/person-summary 如果大家發現錯誤以及不合理之處,還希望多多指出。

總結篇

1、數據最好使用private作用域,這也是面嚮對象語言需要注意的特點之一。

class RectAngle{
    public:
        RectAngle();
    private:
        int width;//屬性,不想暴露給其他類
        int height;//屬性不想暴露給其他類
}

2.、參數儘量使用引用來傳遞,如果不想改變參數的值可以加上const。不在像C語言中傳遞值了,傳遞value會傳遞全部Byte,所佔資源比較多,推薦使用 const &,傳遞int,float等基本數據類型就沒有必要使用引用了,因爲不涉及到對象的拷貝構造。

void calByte(const VaAndRef& sample) {//不期望對值進行修改的時候應該使用const
    cout <<sizeof(sample)<< endl;
}
int main() {
    VaAndRef sample(1,2);
    calByte(sample);
    cin.get();
}

3、返回值儘量也要傳遞引用而不是傳遞值,當然需要注意避免傳遞返回棧內存。

4、在定義函數的時候,如果對成員變量沒有進行修改,應該加上const,如果不加,class的使用者,創建一個const的對象時候就會出現錯誤,當然有的編譯器是提示錯誤的,有的編譯器不會去提示。

#ifndef RECTANGLE_H
#define RECTANGLE_H
class Rectangle
{
public:
    Rectangle(int widthIn, int heightIn) :width(widthIn), height(heightIn) {};
    Rectangle();
    int getWidth() const { return width; }
    int getHeight() const { return height; }
private:
    int width;
    int height;
};
#endif
//類的使用者可能會如此定義變量
const Rectangle re;
//不加const無法繼續執行getWidth()方法。

5、構造函數儘量去使用初始化的方法,省去了賦值等操作階段,非常快捷。這是體現一個C++程序員的地方,看一個人的C++水平如何,看這裏就可以看出。
建議的寫法爲:

class VaAndRef
{
public:
    VaAndRef(int aIn, int bIn) :a(aIn), b(bIn) {}
private:
    int a;
    int b;
};

這種寫法可以直接將變量初始化,不在進行變量的賦值,提高了程序的效率。

6、能使用內聯函數的一定要使用內聯函數,當然是否使用內聯函數是由編譯器決定的, 編譯器如果認爲此段代碼可以定義爲內聯函數,那麼就會將此函數變成內聯函數。

經過多次查看源碼和測試,我發現內聯函數的定義和實現都必須在頭文件中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章