class A
{
public:
void print() {printf ("print() From class A\n");};
protected:
void print2() {printf ("print2() From class A\n");};
private:
void print3() {printf ("print3() From class A\n");};
};
class PublicB : public A
{
public:
int print() {printf ("print() From class B\n"); print2();}; // Redefine
/* 注意: protected 的 print2() 雖被繼承下來, 但不為外人所用 */
/* 注意: private 的 print3() 並沒有被繼承下來 */
};
class ProtectedB : protected A
{
public:
/* 注意: public 的 print() 雖被繼承下來, 但此時已變為 protected */
/* 注意: protected 的 print2() 雖被繼承下來, 但不為外人所用 */
/* 注意: private 的 print3() 並沒有被繼承下來 */
};
class PrivateB : private A
{
public:
void myPrint() {print(); print2();};
/* 注意: public 的 print() 雖被繼承下來, 但此時已變為 private */
/* 注意: protected 的 print2() 雖被繼承下來, 但此時已變為 private */
/* 注意: private 的 print3() 並沒有被繼承下來 */
};
int main()
{
A clsA;
clsA.print();
//clsA.print2(); // Compiler Error! print2() is protected.
PublicB clsB_pub;
clsB_pub.print();
//clsB_pub.print2(); // Compiler Error! print2() is protected.
ProtectedB clsB_pro;
//clsB_pro.print(); // Compiler Error! print() is protected.
//clsB_pro.print2(); // Compiler Error! print2() is protected.
PrivateB clsB_pri;
clsB_pri.myPrint();
system("pause");
}
- 首先,繼承的概念是,只有 public 和 protected 的成員函式或變數會被繼承下來,除了建構式 (Constructor)、解構式 (Constructor) 和 Copy Constructor 除外,還有 private 也不會。
- public: 所有人都能使用。
- protected: 只有自己和兒子 (Derived Class) 可以使用,外人不能使用。
- private: 只有自己可以使用,
兒子 (Derived Class) 和外人皆不能使用。
- 倘若 B 以 public 方式繼承了 A,則存取修飾字 (Access Specifier) 保持相同,規則同 1。
- 倘若 B 以 protected 方式繼承了 A,則 A 的
public 和 protected 成員被以 protected 方式繼承,所以範例中的 Line:48, 49 則發生編譯錯誤,因為
protected 成員不為外人所用。
- 倘若 B 以 private 方式繼承了 A,
則 A 的 public 和 protected 成員被以
private 方式繼承 ,僅自身可使用 Line:31。
沒有留言:
張貼留言