C++におけるprotectedアクセス権の問題
2281 ワード
今日はこんな言葉があることに気づいた.ベースクラスの保護メンバーは、派生クラスのメンバーにアクセスできます.2.派生クラスのメンバーは、派生クラスオブジェクトからのみベースクラスの保護メンバーにアクセスできます.派生クラスは、1つのベースクラスオブジェクトの保護されたメンバーにアクセスできません.
この2つの言葉はめまいがしますが、著者は派生クラスの中でのみ派生クラスオブジェクトを通じてベースクラスのprotectedメンバーにアクセスできることを表現したいと思っています.このようなコードを見てください.
クラスのコードを使用:
3つのキーワードのアクセス範囲をまとめます:public:クラスメンバー関数、サブクラス関数、友元アクセス、クラスのオブジェクトアクセスも可能です.private:クラスメンバー関数および友元のみにアクセスでき、他のアクセスはできません.自分のクラスオブジェクトもできません.protected:クラスメンバー関数、サブクラス関数、およびメタにのみアクセスでき、他のアクセスはできません.自分のクラスオブジェクトもできません.
やはり上の2つのクラスで、publicとprivateだけを見て、次のコードを見ます.
protected継承とprivate継承は、アクセス権を低下させることができます.
private継承を使用すると、親のprotectedプロパティとpublicプロパティがサブクラスでprivateになりprotected継承を使用し、親のprotectedプロパティとpublicプロパティがサブクラスでprotectedになりpublic継承を使用し、親のprotectedプロパティとpublicプロパティは変更されません.
この2つの言葉はめまいがしますが、著者は派生クラスの中でのみ派生クラスオブジェクトを通じてベースクラスのprotectedメンバーにアクセスできることを表現したいと思っています.このようなコードを見てください.
class Base
{
public:
Base();
private:
void foo();
protected:
int m;
};
class Derive : public Base
{
public:
Derive();
};
Derive::Derive()
{
this->m = 1; // m
}
クラスのコードを使用:
Derive *d = new Derive();
std::cout<< d->m <<endl; //
3つのキーワードのアクセス範囲をまとめます:public:クラスメンバー関数、サブクラス関数、友元アクセス、クラスのオブジェクトアクセスも可能です.private:クラスメンバー関数および友元のみにアクセスでき、他のアクセスはできません.自分のクラスオブジェクトもできません.protected:クラスメンバー関数、サブクラス関数、およびメタにのみアクセスでき、他のアクセスはできません.自分のクラスオブジェクトもできません.
やはり上の2つのクラスで、publicとprivateだけを見て、次のコードを見ます.
Base *b = new Base();
b->test_pub(); //
b->foo(); //
std::cout<< b->m; //
protected継承とprivate継承は、アクセス権を低下させることができます.
private継承を使用すると、親のprotectedプロパティとpublicプロパティがサブクラスでprivateになりprotected継承を使用し、親のprotectedプロパティとpublicプロパティがサブクラスでprotectedになりpublic継承を使用し、親のprotectedプロパティとpublicプロパティは変更されません.