发布于 2015-08-16 14:55:44 | 67 次阅读 | 评论: 0 | 来源: 网络整理
数据隐藏是面向对象编程,允许防止程序的功能直接访问类类型的内部表现的重要特征之一。将访问限制的类成员是由类体内标记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
};
公共成员是从类以外的任何地方,但在程序中访问。可以设置和获取公共变量的值,下面的示例中所示的任何成员函数:
import std.stdio;
class Line
{
public:
double length;
double getLength()
{
return length ;
}
void setLength( double len )
{
length = len;
}
}
void main( )
{
Line line = new Line();
// set line length
line.setLength(6.0);
writeln("Length of line : ", line.getLength());
// set line length without member function
line.length = 10.0; // OK: because length is public
writeln("Length of line : ",line.length);
}
当上面的代码被编译并执行,它会产生以下结果:
Length of line : 6
Length of line : 10
一个私有成员变量或函数不能被访问,甚至从类外面看。只有类和友元函数可以访问私有成员。
默认情况下,一个类的所有成员将是私有的,例如,在下面的类宽度是一个私有成员,这意味着直到标记一个成员,它会假设一个私有成员:
class Box
{
double width;
public:
double length;
void setWidth( double wid );
double getWidth( void );
}
实际上,我们定义在公共部分私人部分和相关的功能的数据,以便它们可以从类的外部调用中所示的下列程序。
import std.stdio;
class Box
{
public:
double length;
// Member functions definitions
double getWidth()
{
return width ;
}
void setWidth( double wid )
{
width = wid;
}
private:
double width;
}
// Main function for the program
void main( )
{
Box box = new Box();
box.length = 10.0; /
writeln("Length of box : ", box.length);
box.setWidth(10.0);
writeln("Width of box : ", box.getWidth());
}
当上面的代码被编译并执行,它会产生以下结果:
Length of box : 10
Width of box : 10
protected成员变量或函数是非常相似的一个私有成员,但条件是他们能在被称为派生类的子类来访问一个额外的好处。
将学习派生类和继承的下一个篇章。现在可以检查下面的示例中,这里已经从父类派生Box一个子类smallBox。
下面的例子是类似于上面的例子,在这里宽度部件将是可访问由它的派生类在smallBox的任何成员函数。
import std.stdio;
class Box
{
protected:
double width;
}
class SmallBox:Box // SmallBox is the derived class.
{
public:
double getSmallWidth()
{
return width ;
}
void setSmallWidth( double wid )
{
width = wid;
}
}
void main( )
{
SmallBox box = new SmallBox();
// set box width using member function
box.setSmallWidth(5.0);
writeln("Width of box : ", box.getSmallWidth());
}
当上面的代码被编译并执行,它会产生以下结果:
Width of box : 5