D编程 Class access modifiers
数据隐藏是面向对象编程的重要函数之一,它可以防止程序的函数直接访问类的内部信息。类成员的访问限制由类主体中标有标签的 public , private 和 protected 修饰符指定,成员和类的默认访问权限为私有。
class Base {
public:
//public members go here
protected:
//protected members go here
private:
//private members go here
};
Public 公开
public 可以在class以外但在程序内的任何位置访问,您可以在没有任何成员函数的情况下设置和获取公共变量的值,如以下示例所示:
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
Private 私有
private 变量或函数无法访问,甚至无法从类外部进行查看,默认情况下,一个类的所有成员都是私有的。例如,在以下类中, width 是私有成员。
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 受保护
protected 成员变量或函数与私有成员非常相似,但是它提供了另一个好处,即它的子类对其进行访问。
下面的示例与上面的示例相似,并且 width 成员可由其派生类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