http://www.cnblogs.com/this-543273659/archive/2011/08/02/2125487.html
, , , , , ???
, c++ 。
, protected private, “ ” 。
protected , “ ” 。
private , “ ” 。
, 。
protected private ?
:
1。 ( A) , A , A / protected, A / public。 :
class A
{ protected: A(){}
public: ....
};
calss B : public A
{ public: B(){}
....
};
A a; // error
B b; // ok
2. コンストラクション /コンストラクション をprivateとして すると、このクラスの「 」 のみがクラスのオブジェクトを できます.ここでいう「 」が かるかどうかはわかりませんが、 を げてみましょう.class A
{
private:
A(){ }
~A(){ }
public:
void Instance()// A
{
A a;
}
};
のコードはコンパイルできます. のコードのInstance はクラスAの の です.Instance にはAのオブジェクトが されています.しかし,このInstance は から び すことはできない.どうしてですか.Instance を び すには、オブジェクトを する があります.しかし、 はprivateとして された. はオブジェクトを することはできません.A aObj;//コンパイルはaObjに じない.Instance();ただし、Instanceがstatic であれば、オブジェクトを する がなく、 び すことができます.class A
{
private:
A():data(10){ cout << "A" << endl; }
~A(){ cout << "~A" << endl; }
public:
static A& Instance()
{
static A a;
return a;
}
void Print()
{
cout << data << endl;
}
private:
int data;
};
A& ra = A::Instance();
ra.Print();
の のコードは は モードsingletonモードの なC++コード である.もう1つは、 、コピーコンストラクション とoperator=( オペレータの ロード)がprivateとして されますが、インプリメンテーションボディはありません.これの は,クラスの ユーザがこのクラスのオブジェクトをコピーすることを することである. は「effective C++」の を してください. にどの が えていませんか.