当前位置:首页 > 西部百科 > 正文内容

protected和private区别(private和public还有protected)

2023-05-25 09:30:05西部百科1

private和public还有protected

final和private不是同一个类型的修饰符。final表示类不可以被继承 ,而private则是访问限制修饰符。访问限制修饰符有public private protected 默认(什么都不写)外部类类只能被public 和 默认修饰内部类则可以被public private protected 默认修饰。被private修饰的内部类,只能在外部类的内部new 其对象。

protected与private

public是公共变量的意思 就是在整个程序运行过程中都管用。

private是私有变量的意思 只有类内可直接访问 protected是受保护变量 类内和子类可直接访问, 继承类型意思是说把父类放在哪。举例: class A{ public: int a1; protected: int a2; private: int a3; }; A a; a.a1;//ok a.a2;//error a.a3;//error class B:public A{ public: void fb(){ a1;//ok a2;//ok a3;//error; } }; B b; b.a1,b.a2,b.a3与a.a1,a.a2,a.a3一样,因为是class B:public A,相当于把A放到了B的public部分。如 class B:private A{}; 则 b.a1,b.a2,b.a3都error,因为相当于把A全放到了B的private部分,从B来看这三个变量,都是private的。

简述private,protected,public的区别

说明:Private 变量只能在包含其声明的模块中使用。可以使用 Private 语句声明变量的数据类型。例如,下面的语句声明了一个 Integer 类型的变量:“Private NumberOfEmployees As Integer” 也可以使用 Private 语句来声明变量的对象类型。

下面的语句为工作表的新实例声明了一个变量。Private X As New Worksheet如果在定义对象变量时没有使用 New 关键字,则在使用该变量之前,必须使用 Set 语句将一个已有的对象赋给该引用对象的变量。

在赋值之前,所声明的这个对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。如果不指定数据类型或对象类型,且在模块中没有使用 Deftype 语句,则按缺省情况该变量为 Variant 类型。可以用带空圆括号的 Private 语句来声明动态数组,然后可以在过程内用 ReDim 语句来定义该数组的维数和元素。如果试图在 Private,Public 或 Dim 语句中重新定义一个已显式定义了大小的数组的维数,就会发生错误。当初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。注意 当在过程中使用 Private 语句时,通常将 Private 语句放在过程的开始。

区分:private,空,protected,public 权限

使用private修饰符可以完全隐藏类的成员,使得不能从类外直接访问它们。

不使用修饰符允许同一个包里的任何类直接访问类的成员,但是其他包中的类不可以。

使用protected修饰符允许任何包中的子类或同一包的类的成员。

使用public修饰符允许任何类访问类的成员。

private public protected区别

1.类的声明

在类声明中,需要定义类的名称、对该类的访问权限和该类与其他类的关系等。类声明的格式如下:

[修饰符] class <类名> [extends 父类名] [implements 接口列表]{

}

修饰符:可选参数,用于指定类的访问权限,可选值为public、abstract和final。

类名:必选参数,用于指定类的名称,类名必须是合法的Java标识符。一般情况下,要求首字母大写。

extends 父类名:可选参数,用于指定要定义的类继承于哪个父类。当使用extends关键字时,父类名为必选参数。

implements 接口列表:可选参数,用于指定该类实现的是哪些接口。当使用implements关键字时,接口列表为必选参数。

2.类体

在类声明部分的大括号中的内容为类体。类体主要由两部分构成,一部分是成员变量的定义,另一部分是成员方法的定义。类体的定义格式如下。

public,private,protected

POD,全称plain old data,plain代表它是一个普通类型,old代表它可以与c兼容,可以使用比如memcpy()这类c中最原始函数进行操作。

C++11中把POD分为了两个基本概念的集合

,即:

平凡的(trival)和标准布局的(standard layout)。

首先是平凡的(trival)定义,通常一个平凡的类或者结构体需要满足以下定义:

拥有平凡的

默认构造函数和析构函数。

默认的意思就是由编译器为我们自动生成的,不许是我们自己定义的,但是由于c++11提供了default,也可以是自己定义的加=default,比如

struct Trival{Trival(){}=default;} 就是满足这个要求的,而 struct noTrival{ noTrival(){}; } 就不满足这个要求(哪怕我们定义的构造函数体里面啥都没有)。

这个要求对于带参的构造函数没有束缚。你可以自定义带参的构造函数。

拥有平凡的

拷贝构造函数和移动构造函数。默认的意思同上,也可以使用=default。

拥有平凡的

拷贝赋值操作符和移动赋值操作符。

不能包含虚函数和虚基类。

2.接下来是标准布局的定义:

所有

非静态成员拥有相同的访问级别,(

访问级别就是public,private,protected),

struct t1{ private : int a; public: int b; }就不满足标准布局,因为a,b访问级别不同。

在类和结构体继承时需要满足以下两个情况之一:

派生类中有非静态类,那么这个派生类只能有且只有一个仅包含了静态成员的基类。

基类有非静态成员,那么派生类中不允许有非静态成员。

这两句话看着挺绕口,其实就是在说明一个事实,关于非静态数据的事实,派生类中有非 静态的数据那么它的基类只能是只有静态的,而且基类只能有一个。如果基类有非静态的, 那么派生类就不能有非静态的。有种跷跷板的感觉,非静态的对面坐着的是静态,父子类就 是坐在跷跷板的两端这种对应关系。)

类中第一个非静态类型与基类不是同一个类型。比如

struct A:B{

B b;

int c;

}就不符合这个条件。因为A中第一个成员是基类B类型的。

没有虚类和虚基类(与trival中重复)

所有非静态数据成员都符合标准布局的要求,这其实就是一个递归的定义。

所以在C++11中,POD就是满足平凡的(trival)和标准布局(standard layout)这两个方面。可以使用<type_traits>中的is_pod<T>::value判断T是不是POD类型的。

说了这么多,那么为什么我们需要POD这种条件满足的数据呢?

可以使用字节赋值,比如memset,memcpy操作

对C内存布局兼容。

保证了静态初始化的安全有效。

private public区别

c++public和private类的一个特征就是封装,public和private作用就是实现这一目的。所以:用户代码(类外)可以访问public成员而不能访问private成员;private成员只能由类成员(类内)和友元访问。

2.类的另一个特征就是继承,protected的作用就是实现这一目的。所以:protected成员可以被派生类对象访问,不能被用户代码(类外)访问。

public和protected和private区别

1.委托概述

委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样;然后,你可以创建一个或多个该委托的实例。

定义一个委托的语法是这样的:

[public/protected/private] delegate returnType delegateName(paramtype param1,…)

这是我自己写的,看起来好像有点怪怪的,我来解释一下,private/protected/private是限定词,就不多说了,delegate是申明一个委托的关键词,returnType是一个返回类型,delegateName是一个你给委托起的名字,你可以写任何一个你喜欢的名字,paramtype param1…这个是参数列表。说了这么多可能看起来还是不是很好理解,我是这样认为的,实用点来讲,委托定义就是在一个函数定义中间加入一个delegate的关键词。它的作用类似于你申明一个类:

public class ClassName {…}

创建一个委托的实例:

[public/protected/private] delegateName deleInstanceName = new delegateName(MethodName)

这个类似于实例化一个类,public ClassName instancename = new ClassName(…),这里有个要注意的地方,即MethodName方法要和delegateName的签名一致。什么是签名一致,就是说MethodName的参数列表,返回值要分别和returnType、(paramtype param1,…)一致。举个例子来说明下:

public delegate string DelegateDemo(string name, int age);

比如我们如上定义了一个委托,就写法来说,其实就是在函数 string DelegateDemo(string name, int age)前面加了一个delegate的关键字,下面我们来用创建一个函数:

public string AgentDemo(string name, int age)

{

string rev = “”;

return rev;

}

这个函数是做参数传递给一个DelegateDemo实例的,接下来创建一个DelegateDemo的实例:

DelegateName instanceDemo = new DelegateName(AgentDemo);

这时要说到一致了,即AgentDemo和声明委托时的DelegateDemo(我们姑且将delegate去掉)这两个函数的返回值,参数列表要相同。终于说完了,不知道看的人明不明白。

接下来,我们可以使用这个委托了(调用一个委托),如下:

string name = “cshape”;

int age = 20;

instanceDemo(name, age);

当instanceDemo执行时,会执行AgentDemo函数,instanceDemo相当于C里的一个函数指针,现在这个指针指向AgentDemo的函数入口地址。

2.多点委托

前面提到的委托都只包含对一个方法的调用,如果需要调用多个方法,需要多次显示的调用这个委托,我们还有另的选择,我们可以让一个委托中包含多个方法,这样我们一次显示调用委托,就可以按照顺序连续的调用多个方法。看下面的例子:

public delegate void MultiDelegate(string name);

public void AgentDemo1(string str)

{

Console.WriteLine(str + “this is AgentDemo1\n”);

}

public void AgentDemo2(string s)

{

Console.WriteLine(s + “this is AgentDemo2\n”);

}

MultiDelegate multiDemo = new MultiDelegate(AgentDemo1);

multiDemo += new MultiDelegate(AgentDemo2);

multiDemo(“multiDemo test :”);

输出的结果应该是:

multiDemo test :this is AgentDemo1

mutliDemo test :this is AgentDemo2

可以看到我们一次显示的调用一个委托,它顺序的(按照你添加方法的顺序)执行了方法AgentDemo1和AgentDemo2。这里要注意的有几点:

● 委托支持 +=,-=这样的运算符,对应为添加或去掉一个方法

● 多点委托不可以定义有返回值,因为无法处理多个方法的返回值,所以如果要使用多点委托,应该用void,否则你的编译会返回一个错误

● 多点委托不建议你的参数列表中有OUT的类型,这样只会out最后一个方法的值,其他的值会丢失。

3.委托的理解

首先申明,这只是我举的一个例子,目的是帮助理解委托的过程,其中很多地方都经不起推敲,望大家知悉。言归正传,

你想要吃饭,

但是自己又不会做(委托方不知道实现细节),

你计划找个饭店,叫个回锅肉饭(定义了一个委托)

你决定找常去的那家叫做A的饭店(实例化一个委托)

你打电话给A饭店(委托调用)

A饭店给你做好了你的回锅肉饭(代理函数工作)

饭来了,真好。

4.委托的使用时机

当你需要把一个方法传送给其他方法时,可以考虑使用委托。好像不是很好理解,也可以这样说,当你确定要处理一件事,但又不能确定处理方法时,可以考虑用委托。其实单独的说委托的应用好像有点牵强,委托更多的是在事件中的应用。

private 和 public

private bills 是私人收据的意思,而and public bills则是公共账单,区别可以从以下例子看出:

I have to keep all receipts in different bags, one bag contains public bills, and other containers private bills for my husband and myself. 我必须把所有的收据放在不同的袋子里,一个袋子是公共账单,其他容器是我丈夫和我自己的私人账单。

public,protected,private

C类访问控制符只有三种:public公有private私有protected受保护static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。

public、private、protected

修饰符 当前类 同包 子类 其他包 public √ √ √ √ protected √ √ √ × default √ √ × × private √ × × × 类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。Java中,外部类的修饰符只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种。

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/98861299.html

返回列表

上一篇:如何看资金(如何看资金流向)

没有最新的文章了...