C++ 类访问修饰符
-
类访问修饰符
数据隐藏是面向对象编程的重要功能之一,它可以防止程序的功能直接访问类类型的内部表示。类成员的访问限制由类主体中标记为公共,私有和受保护的部分指定。关键字public,private和protected称为访问说明符。一个类可以具有多个公共,受保护或私有标记的部分。每个部分都保持有效,直到看到另一个部分标签或类主体的右右括号为止。成员和类的默认访问权限为私有(private)。class Base { public: // public members go here protected: // protected members go here private: // private members go here };
-
public 成员
成员函数可以在类定义中定义,也可以使用范围解析运算符::单独定义。在类定义中定义成员函数将内联声明函数,即使您没有使用内联说明符。因此您可以将Volume()函数定义为下面的值
尝试一下#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 成员
私有(private)成员变量或函数不能访问,甚至不能从类外部查看。只有类本身和它的friend函数可以访问私有成员。默认情况下,一个类的所有成员都是私有的,例如在下面的类中,width是私有成员,这意味着除非您标记一个成员,否则它将被假定为私有成员-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 成员
受保护的(protected)成员变量或函数是非常相似的私有成员,但它提供了一个额外的好处,他们可以在被称为派生(继承)类的子类进行访问。在下一章中,您将学习派生类和继承。现在,您可以检查以下示例,其中我从父类Box派生了一个子类SmallBox。下面的示例与上面的示例相似,此处width成员将可由其派生类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