異なる継承方法
10563 ワード
無視された細部
(:) ,Parent ,public ?
class Parent
{
};
class Child :public Parent
{
};
興味深い質問:継承中のpublicをprotectedまたはprivateに変更できますか?もしよろしければ、public継承と何の違いがありますか?
答:はい!
C++では3つの異なる継承方式がサポートされています
public :
private :
protected : ,
継承方法/親メンバーのアクセスレベル
public
protected
private
public
public
protected
private
protected
protected
protected
private
private
private
private
private
C++のデフォルトの継承方法はprivateです!
事実
一般的に、C++プロジェクトはpublic継承のみを使用します.
C++の派生言語は1つの継承方式のみをサポートする(public継承)
protectedとprivate継承による複雑さは実用性よりはるかに大きい
じっけん
1 #include
2 #include <string>
3 using namespace std;
4 class Parent
5 {
6 protected:
7 int m_a;
8 protected:
9 int m_b;
10 public:
11 int m_c;
12 void set(int a, int b, int c)
13 {
14 m_a = a;
15 m_b = b;
16 m_c = c;
17 }
18 };
19 class Child_A : public Parent
20 {
21 public:
22 void print()
23 {
24 cout << "m_a" << m_a << endl;
25 cout << "m_b" << m_b << endl;
26 cout << "m_c" << m_c << endl;
27 }
28 };
29 class Child_B : protected Parent
30 {
31 public:
32 void print()
33 {
34 cout << "m_a" << m_a << endl;
35 cout << "m_b" << m_b << endl;
36 cout << "m_c" << m_c << endl;
37 }
38 };
39 class Child_C : private Parent
40 {
41 public:
42 void print()
43 {
44 cout << "m_a" << m_a << endl;
45 cout << "m_b" << m_b << endl;
46 cout << "m_c" << m_c << endl;
47 }
48 };
49 int main()
50 {
51 Child_A a;
52 Child_B b;
53 Child_C c;
54 a.m_c = 100;
55 // b.m_c = 100; // Child_B Parent, public protected ,
56 // c.m_c = 100; // Child_C Parent, private ,
57 a.set(1, 1, 1);
58 // b.set(2, 2, 2);
59 // c.set(3, 3, 3);
60 a.print();
61 b.print();
62 c.print();
63 return 0;
64 }
実行結果
m_a1
m_b1
m_c1
m_a-858993460
m_b-858993460
m_c-858993460
m_a-858993460
m_b-858993460
m_c-858993460
まとめ:
C++では3つの異なる継承方式がサポートされています
継承プロパティは、子クラスの親メンバーのアクセスプロパティに直接影響します.
一般に,工事ではpublicの継承方式のみが用いられる.
C++の派生言語はpublic継承方式のみをサポートする