1. 程式人生 > >C++的一些知識點摘抄(創建基本類 高級類)

C++的一些知識點摘抄(創建基本類 高級類)

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++的一些知識點摘抄(創建基本類 高級類)