一、基本概念
公有(public)成员 |
公有成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值, |
私有(private)成员 | 私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。 默认情况下,类的所有成员都是私有的。例如在下面的类中,width 是一个私有成员,这意味着,如果您没有使用任何访问修饰符,类的成员将被假定为私有成员: 实际操作中,我们一般会在私有区域定义数据,在公有区域定义相关的函数,以便在类的外部也可以调用这些函数,如下所示: |
protected(受保护)成员 |
protected(受保护)成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的。 在下一个章节中,您将学习到派生类和继承的知识。现在您可以看到下面的实例中,我们从父类 Box 派生了一个子类 smallBox。 下面的实例与前面的实例类似,在这里 width 成员可被派生类 smallBox 的任何成员函数访问。 |
二、代码演示不同类型修饰符的不同权限(不同活动区域也可以)
来用代码实际演示看看把,先看下我们如果输出所有成员会发生什么
#include <iostream>
using namespace std;
class Parent0
{
public:
int A;
protected:
int B;
private:
int C;
};
class Child0:Parent0
{
public:
int a;
protected:
int b;
private:
int c;
int getA();
int getB();
int getC();
};
int Child0::getA()
{
return A;
}
int Child0::getB()
{
return B;
}
int Child0::getC()
{
return C;//这里是行40
}
int main()
{
Parent0 baba;
baba.A = 10;
baba.B = 20;
baba.C = 30;
cout << "A is" << baba.A <<endl;//输出公开的
cout << "B is" << baba.B <<endl;//输出保护的
cout << "C is" << baba.C <<endl;//输出私有的
}
// namespace std
写完,调试信息就已经提醒我有很多错误了
来一个一个看下吧,
第一个错误就是,我在行40的,派生类child0的成员函数getC()中返回了父类的成员变量C,因为C是父类的私有成员,看上面表格的基本概念是啥,私有成员只有类的内部才可以访问,结合下图我画的示意图,假设ClassA是父类,那么私有成员的活动区域只有橘色部分,我在绿色部分调用了这个私有成员就是错误的
但是看下getA()和getB()都没有报错误,所以说明什么呢?对于基类(派生类)来说,父类除了私有成员,都可以被他调用使用的。
好的~接下来再到第二个报错误,是46行,46行的范围已经离开了父类和子类的定义区域,来到了main函数内部,发现使用baba.B,这个受保护的成员,它也是不允许的,baba.C也不允许
这里就可以总结了,在下图中的灰色区域部分,只有公开成员可以被.调用
protected成员,是多给他增加了一点活动区域(派生类每多一个,多一个活动区域)
private成员,只有在它被定义的这个当前类内部可以活动
代码区域可以按照下图分成这样
在 C++ 中,“非派生类的外部代码” 指的是既不属于当前类本身,也不属于从当前类派生出来的任何类的代码部分。