一旦你将一个成员变量声明为public或protected而用户开始使用它,就很难改变那个成员变量所涉及的一切。如果改变:太多代码需要重写,重新测试,重新编写文档,重新编译
#include<iostream>
using namespace std;
//////////////////////////////////////////////////////////////////////////
class A //父类
{
private:
int privatedateA;
protected:
int protecteddateA;
public:
int publicdateA;
};
//////////////////////////////////////////////////////////////////////////
class B :public A //基类A的派生类B(共有继承)
{
public:
void funct()
{
int b;
///b=privatedateA; //error:基类中私有成员在派生类中是不可见的
b=protecteddateA; //ok:基类的保护成员在派生类中为保护成员
b=publicdateA; //ok:基类的公共成员在派生类中为公共成员
}
};
//////////////////////////////////////////////////////////////////////////
class C :private A //基类A的派生类C(私有继承)
{
public:
void funct()
{
int c;
///c=privatedateA; //error:基类中私有成员在派生类中是不可见的
c=protecteddateA; //ok:基类的保护成员在派生类中为私有成员
c=publicdateA; //ok:基类的公共成员在派生类中为私有成员
}
};
//////////////////////////////////////////////////////////////////////////
class D :protected A //基类A的派生类D(保护继承)
{
public:
void funct()
{
int d;
///d=privatedateA; //error:基类中私有成员在派生类中是不可见的
d=protecteddateA; //ok:基类的保护成员在派生类中为保护成员
d=publicdateA; //ok:基类的公共成员在派生类中为保护成员
}
};
//////////////////////////////////////////////////////////////////////////
int main()
{
int a;
B objB;
///a=objB.privatedateA; //error:基类中私有成员在派生类中是不可见的,对对象不可见
///a=objB.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见
a=objB.publicdateA; //ok:基类的公共成员在派生类中为公共成员,对对象可见
C objC;
///a=objC.privatedateA; //error:基类中私有成员在派生类中是不可见的,对对象不可见
///a=objC.protecteddateA; //error:基类的保护成员在派生类中为私有成员,对对象不可见
///a=objC.publicdateA; //error:基类的公共成员在派生类中为私有成员,对对象不可见
D objD;
///a=objD.privatedateA; //error:基类中私有成员在派生类中是不可见的,对对象不可见
///a=objD.protecteddateA; //error:基类的保护成员在派生类中为保护成员,对对象不可见
///a=objD.publicdateA; //error:基类的公共成员在派生类中为保护成员,对对象不可见
return 0;
}
protected并不比public更具有封装性
昨天写可视化作业,写了个小程序处理数据,一点小错改了好久,总结一下:
1.犯了错,不应该立刻去盲目查错,停下来,想一分钟再动手
2.每写一部分,比如一个循环,都仔细想想再动手