C++中,类的protected究竟有什么作用

2020-11-21 18:52:53 字数 6612 阅读 4521

1楼:匿名用户

- 声明 private protected public

继承private x x x

protected x o o

public x o o

类外调用 x x o

由上图可见protected和public的区别:

在类外调用时,可以调用public成员,但是不能调用protected成员

也就这一个区别了。

c++中,类的protected究竟有什么作用?

2楼:可以叫我表哥

protected专门就是为继承(子类)设计的 用public继承,基类所有的访问标识在子类不变, protected还是protected 。

c++编程思想中是这么说的,public意味着随后的定义对所有人都适用;private意味着除了该类型的创建者和该类型的内部成员函数之外,任何人都无法访问这些定义;而protected是继承的类可以访问protected的成员,但不能访问private的成员。

3楼:匿名用户

- 声明 private protected public

继承private x x x

protected x o o

public x o o

类外调用 x x o

由上图可见protected和public的区别:

在类外调用时,可以调用public成员,但是不能调用protected成员

也就这一个区别了。

4楼:赶紧撸毅管

错了,不管何种继承,基类的private成员派生类都无法访问,当然也就出现了protected成员,集合了public成员(对派生类) 和 private成员(对外部访问)的特点。

5楼:匿名用户

protected成员

被公有继承时,在你派生的这个类的内部成员中,能够访问。

比如class a

;class b : public a

//你可以在派生类b中访问到父类a的成员n。

~b(){}

};但是你不能在类的外部访问到父类的保护成员n。

比如下面的**就是错误的:

b x;

x.n = 1;

6楼:匿名用户

c/c++

关键字protected关键字(c++和c#)

具有protected访问控制级别的成员是半公开的,外界无法直接访问这个控制级别的成员,但是派生类的base指针(在c++中也可用引用访问)可以获得访问能力。protected与private基本相似,只有在继承时有较大的区别。继承的类可以访问protected成员,但是不能访问private成员。

以下是msdn提供的c# 中protected关键字的参考资料。

protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。有关 protected 与其他访问修饰符的比较,请参见可访问性级别。

仅当访问通过派生类类型发生时,基类的受保护成员在派生类中才是可访问的。例如,请看以下**段:

// protected_keyword.csusing system;

class a

class b : a

}语句 a.x =10 将生成错误,因为 a 不是从 b 派生的。

结构成员无法受保护,因为无法继承结构。

示例在此示例中,类 derivedpoint 从 point 派生;因此,可以从该派生类直接访问基类的受保护成员。

// protected_keyword_2.cs

using system;

class point

class derivedpoint: point

, y = ", dp.x, dp.y); }}

输出x = 10, y = 15

7楼:匿名用户

起保护作用,protected只有继承的类才可以访问

c++类中的protected什么时候用

8楼:匿名用户

protected,主要是介于public和private之间的一种针对继续关系而来的设计,一般很少用到

1.public继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:public, protected, private

2.protected继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:protected, protected, private

3.private继承:基类public成员,protected成员,private成员的访问属性在派生类中分别变成:private, private, private

但无论哪种继承方式,上面两点都没有改变:

1.private成员只能被本类成员(类内)和友元访问,不能被派生类访问;

2.protected成员可以被派生类(类内)访问。

9楼:小呆瓜

类成员或者继承的时候用到

10楼:匿名用户

说实话,我做开发很多年了,基本很少用到。用的最多的还是public。

c++类的protected与private有何区别

11楼:兄弟连教育

这两个是访问类中成员权限的限制符.在类外如果想使用类中的成员,只能直接使用public类型的,protected和private都是不能访问的,对于类外使用而言,这两个是完全相同的.

但是在基类的派生类中,可以直接访问继承而来的protected成员,但是不能访问private限制的成员.所以在派生类中,可以访问基类继承而来的public和proected两种类型的成员.在public公有派生下,继承而来的成员访问权限不变.

protected派生下,public和protected都变成protected,private派生下,所有的继承下来都是private了.

c++中的类究竟有什么用?

12楼:投机士

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。通常在编程语句中用 abstract 修饰的类是抽象类。在c++中,含有纯虚拟函数的类称为抽象类,它不能生成对象;在java中,含有抽象方法的类称为抽象类,同样不能生成对象。

抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色。只要把这些东西对应到生活中的概念就明白面向对象的设计本身**于生活,我们对事物的理解本身都是一样的哲学,理解概念之后怎么写**就更容易掌握。

抽象类是表示部分地实现功能,比如把某些已经确定的功能实现了,而抽象的功能则表示未实现,因为不能确定子类用什么方式实现它或者说把可能性和机会留给子类,比如对于宠物这个抽象类"睡觉“这个方法就是抽象的,因为子类的实现方法各有差异,狗经常待在墙边阴凉处睡觉,而猫则爬到树上睡觉,我们父类中不能把这个”个性“的东西放入”共性“的父类中,“共性”是它们都会睡觉,但具体怎么睡觉则是”个性“,因此只能把它弄成抽象的,把机会留给子类来实现它。抽象类和抽象方法的目的是相同的。当子类实现这些抽象方法后就是叫”实现“,如果这个方法在父类中已经实现了不是抽象的而子类再来实现一次就是“覆盖”或“重写“了父类的方法,这2个都叫实现了”多态“特性。

“多态”就是某个“共性”在各个子类中表现出不同的“个性”,但都同时保留着“共性”。

pet pets = new pet ;

for(int i = 0;i < pets.length; i++)

13楼:利德

专家指出,面向对象编程的优势只有在大约5万行**规模的程序里才能完全体现出来,平时编的小程序使用类只是不断的让你培养一种面向对象而不是面向过程的思维方式,并没有什么实际意义,你难道没有发现使用类让程序变长变大的时候,程序也变得简单了,各种函数,变量都被有机的组合起来,而且当你需要完成一个类似功能的程序,你只需要很少的改动,一个现成的类就能使用了

14楼:匿名用户

类是绝对重要的,这个问题初学时不要问,就像当初你明明可以用汉语好好交流,为什么要学英语。只有你要与来外交流时才知道其重要性!

15楼:匿名用户

工业革命的标志是:蒸汽机,电等,软件革命的标志是类。

16楼:匿名用户

在面向对象的程序设计中,有经常接触类、对象等专业名词;到底什么是类、什么是对象呢?在程序又是怎样运用呢?类是面向对象程序设计的核心,它实际是一种新的数据类型,也是实现抽象类型的工具,因为类是通过抽象数据类型的方法来实现的一种数据类型。

类是对某一类对象的抽象;而对象是某一种类的实例,因此,类和对象是密切相关的。没有脱离对象的类,也没有不依赖于类的对象。

什么是类

类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。这有点像c语言中的结构,唯一不同的就是结构没有定义所说的“数据相关的操作”,“数据相关的操作”就是我们平常经常看到的“方法”,因此,类具有更高的抽象性,类中的数据具有隐藏性,类还具有封装性。

类的结构(也即类的组成)是用来确定一类对象的行为的,而这些行为是通过类的内部数据结构和相关的操作来确定的。这些行为是通过一种操作接口来描述的(也即平时我们所看到的类的成员函数),使用者只关心的是接口的功能(也就是我们只关心类的各个成员函数的功能),对它是如何实现的并不感兴趣。而操作接口又被称为这类对象向其他对象所提供的服务。

类的定义格式

类的定义格式一般地分为说明部分和实现部分。说明部分是用来说明该类中的成员,包含数据成员的说明和成员函数的说明。成员函数是用来对数据成员进行操作的,又称为“方法”。

实现部分是用来对成员函数的定义。概括说来,说明部分将告诉使用者“干什么”,而实现部分是告诉使用者“怎么干”。

类的一般定义格式如下:

class 《类名》

;《各个成员函数的实现》

下面简单地对上面的格式进行说明:class是定义类的关键字,《类名》是种标识符,通常用t字母开始的字符串作为类名。一对花括号内是类的说明部分(包括前面的类头)说明该类的成员。

类的成员包含数据成员和成员函数两部分。从访问权限上来分,类的成员又分为:公有的(public)、私有的(private)和保护的(protected)三类。

公有的成员用public来说明,公有部分往往是一些操作(即成员函数),它是提供给用户的接口功能。这部分成员可以在程序中引用。私有的成员用private来说明,私有部分通常是一些数据成员,这些成员是用来描述该类中的对象的属性的,用户是无法访问它们的,只有成员函数或经特殊说明的函数才可以引用它们,它们是被用来隐藏的部分。

保护类(protected)将在以后介绍。

关键字public,private和protected被称为访问权限修饰符或访问控制修饰符。它们在类体内(即一对花括号内)出现的先后顺序无关,并且允许多次出现,用它们来说明类成员的访问权限。

其中,《各个成员函数的实现》是类定义中的实现部分,这部分包含所有在类体内说明的函数的定义。如果一个成员函数的类体内定义了,实现部分将不出现。如果所有的成员函数都在类体内定义,则实现部分可以省略。

下面给出一个日期类定义的例子:

class tdate

;//类的实现部分

void tdate::setdate(int y, int m, int d)

int tdate::isleapyear()

void tdate::print();

这里出现的作用域运算符::是用来标识某个成员函数是属于哪个类的。

该类的定义还可以如下所示:

class tdate

int isleapyear()

void print()

private:

int yeay, month, day;

}这样对成员函数的实现(即函数的定义)都写在了类体内,因此类的实现部分被省略了。如果成员函数定义在类体外,则在函数头的前面要加上该函数所属类的标识,这时使用作用域运算符::。

定义类时应注意的事项

1、在类体中不允许对所定义的数据成员进行初始化。

2、类中的数据成员的类型可以是任意的,包含整型、浮点型、字符型、数组、指针和引用等。也可以是对象。另一个类的对象,可以作该类的成员,但是自身类的对象是不可以的,而自身类的指针或引用又是可以的。

当一个类的对象用为这个类的成员时,如果另一个类的的定义在后,需要提前说明。

3、一般地,在类体内先说明公有成员,它们是用户所关心的,后说明私有成员,它们是用户不感兴趣的。在说明数据成员时,一般按数据成员的类型大小,由小至大说明,这样可提高时空利用率。

4、经常习惯地将类定义的说明部分或者整个定义部分(包含实现部分)放到一个头文件中。