C++之类成员的访问权限详解(一)

概念解析

众所周知,面向对象编程语言的特征之一就是封装,不同编程语言对于封装提供的实现有所不同,但原理大体上是相同的。C++提供了三种不同程度的访问权限来实现,主要是通过public、private、protected三个关键字实现的。下面我们来详细分析一下这三个关键字的具体作用和区别。

这三个关键字主要用来控制类或者结构体成员变量和成员函数的访问权限,称为成员访问限定符,分别代表公有的、受保护的、私有的,它们所表达的封装程度不同,在使用时需要特别注意。

访问权限限定符的使用又跟类本身的性质有关,即继承对访问权限的使用有一定的影响,本文主要探讨无继承情况下的访问。

public限定符

被public限定符所修饰的成员变量和函数可以被类的函数、子类的函数、友元函数,也可以由类的对象来访问,即可以使用成员运算符来访问。这里的友元函数,可以是该类的友元函数,也可以是该类的友元类的成员函数。使用形式如下:

class temp{
public:
int a; //修饰成员变量
temp() //修饰成员函数,这里修饰构造函数
{
//初始化类对象成员
}
}

protected限定符

protected限定符修饰的成员变量和成员函数可以被该类的成员函数访问,但是不能被类对象所访问,即不能通过类对象的成员运算符来访问。另外,这些成员可以被子类的函数和友元函数访问,相比public成员 少了一个可以使用类对象直接访问的特性。具体使用与public类似,这里不再贴出代码。

private限定符

被private限定符修饰的成员变量只能被该类的方法和友元函数访问,子类函数无法访问,在这三个限定符中封装程度是最高的,一般来说,应该尽可能将类的成员变量声明为private而不是其他,减少成员变量的暴露,只提供getter和settter方法给外界访问,这样能提高类的安全性。具体使用与public类似。

注意事项

C++与Java不同,C++中的类没有公有私有之分,在使用时直接声明即可,访问权限限定符只用于修饰类的成员变量和成员函数。

参考资料

《C++ Primer》

https://www.cnblogs.com/dongsheng/p/3344011.html

https://blog.csdn.net/zxf529/article/details/1746728

上一篇:记录maven java.lang.String cannot be cast to XX error


下一篇:scala 访问权限详解