[ad_1]
やあ。 親クラスのプライベート変数にアクセスしたいのですが、display() メソッドを思い出すと、派生クラスの変数が表示されます。 誰かがこれを行う方法を教えていただければ幸いです。 また、 public キーワードを使用して、またはそれなしで継承を宣言しても変更はありません。なぜですか?
どうもありがとう。
#include <iostream> using namespace std; class parent_class{ private: int private1,private2; public: void assign(int p1,int p2){ private1=p1; private2=p2; } void display(){ printf("\nprivate1=%-5d private2=%-5d",private1,private2); } }; class derived_class:parent_class{ private: int private3; public: void assign_derived(int p1,int p2,int p3){ assign(p1,p2); private3=p3; } void display_derived(){ printf("\nDerived Class Variables:"); display(); printf("\n private3=%-5d\n",private3); } }; int main() { parent_class parent; derived_class derived1; parent.assign(-5,-12); derived1.assign_derived(20,32,45); //derived1.display(); derived1.display_derived(); return 0; }
私が試したこと:
メイン関数で親変数にアクセスしようとしましたが、main() ではなく、派生クラス自体からアクセスできるようにしたいと考えています。
解決策 1
変数 「派生クラスで」 親クラスの変数です。
すべての変数を持つ派生クラスのインスタンスであるオブジェクトがあります: 親で宣言されたもの (base
) クラスと派生クラスで宣言されたもの。
解決策 2
カルロスが言ったことに追加するには…クラスを派生させると、子クラスはその親クラスのすべてのプロパティ、メソッド、および変数を継承し、アクセス修飾子は変更されません-派生クラスをパブリックとして宣言しても、親の非公開メンバーは非公開のまま
また、クラスのプライベート メンバーは、その特定のクラス内でのみ使用できます。元のクラスから派生したものであっても、他のクラスからアクセスすることはできません。
これは言語の仕様の一部であり、「外部の世界」がアクセスできるメソッドが正確に実行されるという条件で、クラスが他のすべてのクラスから実装の詳細を隠し、他のクラスに影響を与えずに実装を変更できるようにするためのものです。ブラック ボックスと同じ機能 (同じ入力、同じ出力) ですが、その機能のしくみは大きく異なる可能性があります。
親クラスが派生クラスからアクセスできる変数が必要な場合は、それらを次のようにマークする必要があります。 protected
、 いいえ private
[ad_2]
コメント