1. 程式人生 > >effective c++ 將成員變數宣告為private

effective c++ 將成員變數宣告為private

一旦你將一個成員變數宣告為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.每寫一部分,比如一個迴圈,都仔細想想再動手