您的位置:首页 > 编程语言 > C语言/C++

effective c++ 将成员变量声明为private

2015-11-02 13:07 302 查看
一旦你将一个成员变量声明为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;
}


引用csqlwy

protected并不比public更具有封装性

昨天写可视化作业,写了个小程序处理数据,一点小错改了好久,总结一下:

1.犯了错,不应该立刻去盲目查错,停下来,想一分钟再动手

2.每写一部分,比如一个循环,都仔细想想再动手
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  测试 debug 封装 条款22