effective c++ 將成員變數宣告為private
阿新 • • 發佈:2019-02-20
一旦你將一個成員變數宣告為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.每寫一部分,比如一個迴圈,都仔細想想再動手