C++類的訪問修飾符
數據隱藏是麵向對象編程的重要的特點,允許防止程序直接訪問類類型的內部的功能之一。訪問限製類成員被標記 public, private, 和protected 類主體部分。public, private, 和protected關鍵字被稱為訪問修辭符。
類可以有多個public, protected 或 private 標記部分。每個部分仍然有效,直至另一段標簽或類主體的關閉右括號。會員和類的缺省訪問是私有的。
class Base { public: // public members go here protected: // protected members go here private: // private members go here };
公共成員:
公共成員可從該類以外的任何地方,設置和獲取公共變量的值,而不作為顯示在下麵的實例的任何成員函數:
#include <iostream> using namespace std; class Line { public: double length; void setLength( double len ); double getLength( void ); }; // Member functions definitions double Line::getLength(void) { return length ; } void Line::setLength( double len ) { length = len; } // Main function for the program int main( ) { Line line; // set line length line.setLength(6.0); cout << "Length of line : " << line.getLength() <<endl; // set line length without member function line.length = 10.0; // OK: because length is public cout << "Length of line : " << line.length <<endl; return 0; }
當上述代碼被編譯和執行時,它產生了以下結果:
Length of line : 6 Length of line : 10
私有(private)成員:
私有成員變量或函數不能訪問,甚至從類外麵看。隻有類和友元函數可以訪問私有成員。
默認情況下,類的所有成員將是私有的,例如在下麵的類寬度為一個私有成員,這意味著直到標注一個成員,將假定一個私有成員:
class Box { double width; public: double length; void setWidth( double wid ); double getWidth( void ); };
實際上,我們在公有部分,以便它們可以從類的外部調用中所示的下列程序確定在專用段的數據和相關函數。
#include <iostream> using namespace std; class Box { public: double length; void setWidth( double wid ); double getWidth( void ); private: double width; }; // Member functions definitions double Box::getWidth(void) { return width ; } void Box::setWidth( double wid ) { width = wid; } // Main function for the program int main( ) { Box box; // set box length without member function box.length = 10.0; // OK: because length is public cout << "Length of box : " << box.length <<endl; // set box width without member function // box.width = 10.0; // Error: because width is private box.setWidth(10.0); // Use member function to set it. cout << "Width of box : " << box.getWidth() <<endl; return 0; }
讓我們編譯和運行上麵的程序,這將產生以下結果:
Length of box : 10 Width of box : 10
保護(protected)成員:
保護成員變量或函數非常類似私有成員,但它提供了一個額外的好處,即它們可以在被稱為派生類的子類進行訪問。
這裡將學習派生類,繼承在下一個章節。現在可以檢查下麵的例子中,我們已經從一個父類Box派生一個子類smallBox。
下麵的例子是類似於上述實例,這裡寬度構件將通過其派生類在smallBox的任何成員函數訪問。
#include <iostream> using namespace std; class Box { protected: double width; }; class SmallBox:Box // SmallBox is the derived class. { public: void setSmallWidth( double wid ); double getSmallWidth( void ); }; // Member functions of child class double SmallBox::getSmallWidth(void) { return width ; } void SmallBox::setSmallWidth( double wid ) { width = wid; } // Main function for the program int main( ) { SmallBox box; // set box width using member function box.setSmallWidth(5.0); cout << "Width of box : "<< box.getSmallWidth() << endl; return 0; }
讓我們編譯和運行上麵的程序,這將產生以下結果:
Width of box : 5