Protected&&Private&&Public的区别
之前学习java就只知道使用public,对于private的概念也很模糊,就是觉得都能用,也没去研究区别,今天也要来一探究竟。
关于这个方面的概念,我在菜鸟教程上看到的关系图还是挺清晰明了的,在这里截个图看看:
很直观的体现出了差别,使用public时,不论是同一个类,或者是派生类,或者是外部类,都可以直接使用和访问,比如下面这串代码:
最近在学C++,这里就用C++来演示吧
#include "pch.h"
#include <iostream>
using namespace std;
// 基类
class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
public:
int width;
int height;
};
// 派生类
class Rectangle : public Shape
{
public:
int getArea()
{
return (width * height);
}
public:
int use_getArea()
{
return getArea();
}
};
int main(void)
{
Rectangle Rect;
Rect.setWidth(5);
Rect.setHeight(7);
// 输出对象的面积
cout << "Total area: " << Rect.use_getArea() << endl;
return 0;
}
这里最后的输出是35,过程是use_getArea函数去调用了同一个类中的getArea,而getArea是调用了基类的width和height,而且也能在派生类中调用setWidth和setHeight,看起来如果使用public,便可以随处使用类中的方法和定义的变量类型,只要继承以后输入相同的关键字即可。
下面是Protectd方式:
当Shape改编为protected时
class Shape
{
protected:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};
在mian中的调用就会失败:
int main(void)
{
Rectangle Rect;
Rect.setWidth(5);//调用失败
Rect.setHeight(7);//调用失败
//如果是visual studio在控制台就会出现"函数‘Shap:::setWidth’已申明不可访问"
cout << "Total area: " << Rect.use_getArea() << endl;
return 0;
}
但是可以在class Rectangle中直接传入参数,一样可以调用setWindth等,这就是派生类可以调用而外部的类不行。
最后看到Private:
在此可以看到,无论是派生类和第三方的类都无法直接调用Shape里面的Private参数只有在自己的类中才可以,如下:
所以根据自己的需要,可以给Class的函数和参数做权限的设置,对于一些特殊的程序来说,也是一个很不错的方案。