【解決方法】最初のプログラムではプライベートメンバーにアクセスできますが、2番目のプログラムではアクセスできません。 なんで?

プログラミングQA


C++
// C++ program to demonstrate the working of public inheritance

#include <iostream>
using namespace std;

class Base {
private:
int pvt = 1;

protected:
int prot = 2;

public:
int pub = 3;

// function to access private member
int getPVT() {
return pvt;
}
};

class PublicDerived : public Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}
};

int main() {
PublicDerived object1;
cout << "Private = " << object1.getPVT() << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.pub << endl;
return 0;
}

C++
// 2nd program

#include <iostream>
using namespace std;

class Base {
private:
int pvt = 1;

protected:
int prot = 2;

public:
int pub = 3;

// function to access private member
int getPVT() {
return pvt;
}
};

class ProtectedDerived : protected Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}

// function to access public member from Base
int getPub() {
return pub;
}
};

int main() {
PublicDerived object1;
cout << "Private = " << object1.getPVT() << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.pub << endl;
return 0;
}

私が試したこと:

(何もないようです。上記の 2 つのコード ブロックは、OP によって提供される唯一のコンテンツです。)

解決策 1

通話中:

C++
cout << "Private = " << object1.getPVT() << endl;

あなたは public 方法 getPVT の値を返します private 変数。 2番目のプログラム(私が推測)では、アクセスしようとしています private 変数 pvt これは許可されていません。

解決策 2

「プライベート」とは、変数またはメソッドがクラスの外部からアクセスできないことを意味します。コンテンツがパブリック メソッドによって公開されている場合にのみ、外部から利用できます。

最初の例では、変数自体は公開されていません。外部の世界は変数を好きなように扱うことができますが、変数に格納されている整数値には影響しません。 pvt クラスで。 メソッドを呼び出し、それが返す値を変更してから、メソッドを再度呼び出して、元の値を再度取得できます。

2 番目の例は、変数を公開します。外部の世界は、クラス内の変数コンテンツを直接変更できます。

コメント

タイトルとURLをコピーしました