为什么是';私人';用于面向对象程序? 在OOP中,有“公共”、“私有”和“保护”等C++语言。我尝试了两种简单的程序 以下是C++中的第一个例子。 class A { public: string name; } int main(void) { A a; a.name; }
第二种情况为什么是';私人';用于面向对象程序? 在OOP中,有“公共”、“私有”和“保护”等C++语言。我尝试了两种简单的程序 以下是C++中的第一个例子。 class A { public: string name; } int main(void) { A a; a.name; },c++,oop,protected,C++,Oop,Protected,第二种情况 class A { protected: string name; public: string getName(void) { return name; } } int main(void) { A a; //a.name; //can't access cout << a.getName(); } A类{ 受保护的: 字符串名; 公众: 字符串getName(void){ 返回名称;
class A {
protected:
string name;
public:
string getName(void) {
return name;
}
}
int main(void) {
A a;
//a.name; //can't access
cout << a.getName();
}
A类{
受保护的:
字符串名;
公众:
字符串getName(void){
返回名称;
}
}
内部主(空){
A A;
//a、 name;//无法访问
第二个是更好的类,我们将数据紧密地封装到类中,并且通过使用protected允许继承范围。成员名只能通过类的成员函数更改
在第一个类中,通过将成员公开,我们允许程序中的外部函数操作数据,这实际上不是一个好的编程实践。封装
在第一个示例中,任何人都可以按照自己的意愿使用名称。在这个简单的示例中,他们不会造成太大的伤害,但是如果name
是“Fred”并将其更改为“Barney”会使程序崩溃怎么办
A.name = "Barney";
程序现在崩溃了
在第二个示例中,name
是不可访问的。getName
返回name
的副本。收件人可以对该副本执行任何操作,而不会损坏a
的内部状态,因此
string temp = A.getName();
temp = "Barney";
什么都不做
可以将此视为对象的自卫。每个对象现在都可以控制其内部状态的修改方式,并可以保护自己免受意外误用和损坏
A
的用户甚至不必知道他们从getName
中获得的内容是如何存储的。他们所知道的只是他们得到一个字符串。这将A
与它的用户分离。受保护的访问修饰符
受保护的访问修饰符可以在包内和包外访问,但只能通过继承进行访问
专用访问修饰符
私有访问修饰符只能在类中访问。
Private基本上用于抽象
范例
package pack;
public class A{
protected void msg(){System.out.println("Hello");}
}
//save by B.java
package mypack;
import pack.*;
class B extends A{
public static void main(String args[]){
B obj = new B();
A obj = new B();//compile time error
obj.msg();
}
}
Output:Hello
私有比受保护更严格“因为信息必须隐藏,第二个可能更好”-如果目标是隐藏信息,那么第二个可能是唯一一个远程符合条件的,因此默认情况下它会赢得“更好”。