C++的一些知識點摘抄(創建基本類 高級類)
阿新 • • 發佈:2019-04-22
right 添加 code 返回 cat 修改 upper 全局 class
問:對象有多大?
答:對象占據的內存量取決於其成員變量的長度,類函數不占據為對象分配的內容。
有些編譯器在內存中對齊變量,這導致2字節變量實際占用的內存多於2字節。
問:為何不應將所有成員數據聲明為公有的?
答:通過將成員數據聲明為私有的,可以讓類的使用者能夠使用這些數據,同時不必擔心他們是如何存儲和計算的。例如在三輪車類Tricylce有成員函數getspeed(),Tricycle類的使用者可請求獲得三輪車的速度,而無需知道速度是存儲在成員變量中還是動態計算得到的。公有數據類似於全局數據,任何對象的代碼都可以訪問它,因此如果這些數據被修改,通常會很難確定這些數據的修改是在哪裏進行的。
const成員函數:
void displayPage() const; //在函數括號後面添加關鍵字const 可以將成員函數聲明成常量函數,其表明它不會修改任何類成員的值。
內聯實現
可將常規函數聲明為類聯的,同樣也可將成員函數聲明成內聯的,為此需要在返回類型前面指定關鍵字inline, 如下代碼
inline int Tricycle::getSpeed() { return speed; }
也可將函數定義放在類聲明中,這樣函數將自動變成內聯的,如下例所示:
class Tricycle { public:int getSpeed() const { return speed; } void setSpeed(int newSpeed); }
將其他類用作成員數據的類
如一個矩形Rectangle類中我們可以使用點Point類。
class Point { public: // 一些需要的函數和成員變量 private: //一些需要的函數和成員變量 }; class Rectangle { public: //一些需要的函數和成員變量
void setUpperLeft(Point location);void setUpperRight(Point location);
... private: Point upperLeft; Point upperRight; Point lowerLeft; Point lowerRight; int top; int left; int bottom; int right; };
問:既然使用常量函數修改類會導致編譯器錯誤,為何不刪除關鍵字const?這樣可以確保不會發生錯誤。
答:從邏輯上講,某個函數不應該修改類,則使用const關鍵字很不錯,因為這楊,如果我們不小心在這個函數中修改了成員變量的值,編譯器會幫助我們發現愚蠢的錯誤。
C++的一些知識點摘抄(創建基本類 高級類)